0

我正在创建一个简单的(ish)远程登录服务器,现在正在使用 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 来删除/释放它,如下所示。是对的吗?

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
}
4

1 回答 1

7

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

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

于 2013-10-09T07:19:24.867 回答