Я создаю простой (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(), но то сигнальные слоты, которые я пытаюсь подключить, жалуются на то, что связаны с другим родителем. Это проблема? Ключ? И ... каков будет ответ?
Я удаляю/освобождаю 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
}
Где вы "удаляете", что 'tcpSocketPtr'? –
Я показал код, вызванный, когда клиент отключился ... и где я надеюсь освободить память, выделенную для сокета. Это верно? – TSG
Вы не «удаляете» зону памяти, указанную 'tcpSocketPtr', вы просто очищаете указатель (не делая ничего с зоной памяти и объектом QTcpSocket!). –