我正在創建一個簡單的(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'對象進行任何操作!)。 –