【发布时间】:2013-10-16 08:49:18
【问题描述】:
我正在创建一个简单的(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
}
【问题讨论】:
-
你在哪里
delete那个tcpSocketPtr? -
我展示了当客户端断开连接时调用的代码......我希望释放为套接字分配的内存。这是正确的吗?
-
你不
deletetcpSocketPtr指向的内存区你只是清除指针(不对内存区和QTcpSocket对象做任何事情!)。
标签: c++ qt memory-leaks qtcpsocket