Я создаю простой telnet-сервер и сейчас занимаюсь отладкой с помощью valgrind. код работает отлично, но valgrind жалуется на потерю памяти при завершении программы... и виновником является строка, в которой я создаю новый 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
}
delete
чтоtcpSocketPtr
? - person Basile Starynkevitch   schedule 09.10.2013delete
указываете зону памяти, на которую указываетtcpSocketPtr
, вы просто очищаете указатель (ничего не делая с зоной памяти и объектомQTcpSocket
!). - person Basile Starynkevitch   schedule 09.10.2013