Я запускаю valgrind в своей программе Qt/C++ и получаю эту ошибку:
Invalid read of size 8
in TelnetConnection::disconnectClient() in telnetserver/telnetconnection.cpp:188
а строка 188 - строка waitForDisconnected ниже:
void TelnetConnection::disconnectClient()
{
tcpSocketPtr->disconnectFromHost();
tcpSocketPtr->waitForDisconnected();
}
Я не совсем уверен, что означает эта ошибка, но как я могу это исправить? Или это из-под контроля? (вопрос Qt)?
Я не уверен, что это связано, но единственная другая ошибка, которую я получаю:
384 bytes in 1 blocks are possibly lost in loss record 5,342 of 5,972
in TelnetServer::incomingConnection(long long) in telnetserver/telnetserver.cpp:22
и строка ошибки - Start():
void TelnetServer::incomingConnection(qintptr socketDescriptor)
{
TelnetConnection *thread = new TelnetConnection(socketDescriptor, this);
connect(thread, SIGNAL(shutdownRequested()), m_controller, SLOT(shutdownCommandIssued()));
connect(thread, SIGNAL(finished()), thread, SLOT(deleteLater()));
connect(m_controller, SIGNAL(shutingdown()), thread, SLOT(shutdownConnection()));
thread->start();
}
снова... как эта функция запуска может вызвать утечку памяти? Или слова "возможно потерянные" означают, что это действительно нормально?
См. Комментарии sebastian выше для лучшего ответа. В основном ошибка чтения/записи связана с продолжающимся трафиком сокета даже после закрытия сокета (закрытие не останавливает весь трафик). Решение заключается в удалении сокета при удалении потока.