Qt / C ++ QTcpSocket导致内存泄漏,不知道为什么

时间:2013-10-09 06:15:34

标签: c++ qt memory-leaks qtcpsocket

我正在创建一个简单的(ish)telnet服务器,现在正在使用valgrind进行调试。代码运行得很好,但是当程序终止时,valgrind会抱怨内存丢失...而罪魁祸首是我创建一个新QTcpSocket的行:

void TelnetConnection::run()
{
    tcpSocketPtr = new QTcpSocket();  // ** remove this due to parent error
    if (!tcpSocketPtr->setSocketDescriptor(socketDescriptor)) {
        emit error(tcpSocketPtr->error());
        return;
    }
}

我尝试将'this'传递给QTcpSocket()但是我尝试连接的信号槽抱怨与另一个父关联。这是问题吗?线索?而且......答案是什么?


我通过将tcpsocketptr赋值为0来删除/释放tcpsocketptr,如下所示。是吗?

void TelnetConnection::clientDisconnected()
{
    tcpSocketPtr = 0; // ** Cure memory loss?
    TelnetConnection::s_clientCount--;
    Logger *log =  Logger::instance();
    log->record(Logger::Information,EVENTID_TELNET_DISCONNECTION,"Telnet client "+QString::number(m_clientNumber) +": Disconnecting");
    QThread::quit();  // Exit ths event loop for this thread
}

1 个答案:

答案 0 :(得分:7)

每次打电话给“新”时,你必须打电话给“删除”。正如评论所建议的那样,您将指针指向0,但从不调用delete。

编辑添加一个YT视频,对概念进行了很好的解释:http://www.youtube.com/watch?v=_749lj2yb8Y基本上你永远不会释放你从CPU请求的内存,因此内存泄漏。简单的删除调用就可以解决这个问题。

相关问题