Удаление выделенной памяти по указателю не работает - PullRequest
0 голосов
/ 11 марта 2020

Я создаю приложение на C ++ с каркасом QT, который включает HTTP-запрос POST. Значение, на которое указывает указатель ответа, не удаляется и вызывает утечку памяти. Я попытался удалить это распределение памяти следующим образом:

if (reply)
{
    qDebug() << "reply deleted";
    delete reply;
}
reply = m_qnam->post(request, jsonString);
qDebug() << reply;
connect(reply, SIGNAL(finished()), this, SLOT(handleNetworkData()));
connect(reply, SIGNAL(sslErrors(QList<QSslError>)), this, SLOT(handleSSLErrors()));

Всякий раз, когда я пытаюсь это сделать, программа мгновенно падает. В заголовке этого класса ответ инициируется как указатель:

QNetworkReply * reply;

Кто-нибудь знает, почему моя программа падает, удаляя выделение памяти, на которое указывает указатель? Что может быть возможным решением моей проблемы?

Ответы [ 2 ]

0 голосов
/ 11 марта 2020

Вместо использования необработанных указателей, вы можете рассмотреть возможность переключения на Smartpointers (например, std::unique_ptr).

Smartpointers используют RAII, в котором экземпляр класса std::unique_ptr<T> содержит указатель и удаляет его при уничтожении.

Чтобы ответить на ваш вопрос: он падает, потому что reply = m_qnam->post(request, jsonString); может вернуть nullptr, и вы (предположительно) пытаетесь разыменовать этот nullptr.

0 голосов
/ 11 марта 2020

Может быть, вам следует использовать reply.deleteLater ()

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...