我正在创建一个简单的(ish)telnet服务器,现在正在使用valgrind进行调试。代码运行很好,但Valgrind的抱怨内存在程序结束时,会丢失......而罪魁祸首就是我创建一个新的与QTcpSocket行:Qt/C++ QTcpSocket导致内存泄漏,不知道为什么
void TelnetConnection::run()
{
tcpSocketPtr = new QTcpSocket(); // ** remove this due to parent error
if (!tcpSocketPtr->setSocketDescriptor(socketDescriptor)) {
emit error(tcpSocketPtr->error());
return;
}
}
我试图通过“这个”到与QTcpSocket(),但那么我尝试连接的信号插槽会抱怨与不同的父母关联。这是问题吗?线索?而...答案是什么?
我按照下面的方式为它指定一个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
}
你在哪里删除'tcpSocketPtr'? –
我展示了客户端断开连接时调用的代码......并且希望释放为套接字分配的内存。它是否正确? – TSG
你不需要'删除'tcpSocketPtr指向的内存区域,只需清除指针(不需要对内存区域和'QTcpSocket'对象进行任何操作!)。 –