我正在使用包含HTTP POST请求的QT框架在C ++中创建一个应用程序。答复指针指向的值不会被删除,并且会导致内存泄漏。我试图删除这样的内存分配:
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;
有人知道为什么我的程序通过删除指针指向的内存分配而崩溃吗?有什么可能解决我的问题的方法?
也许您应该使用reply.deleteLater()
代替使用原始指针,您可能需要考虑切换到Smartpointer(例如std::unique_ptr
)。
[Smartpointer使用RAII,其中类std::unique_ptr<T>
的实例保存指针并在销毁时将其删除。
要回答您的问题:由于reply = m_qnam->post(request, jsonString);
可能返回nullptr
,并且您(大概)尝试取消对此nullptr
的引用,因此它崩溃。