Qt / C ++ / Valgrind Invalid Readsize 8 при отключении QTcpSocket

0

Я запускаю 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();
}

снова... как эта функция запуска может вызвать утечку памяти? Или слова "возможно потерянные" означают, что это действительно нормально?

Теги:
valgrind
qt
qtcpsocket

1 ответ

0
Лучший ответ

См. Комментарии sebastian выше для лучшего ответа. В основном ошибка чтения/записи связана с продолжающимся трафиком сокета даже после закрытия сокета (закрытие не останавливает весь трафик). Решение заключается в удалении сокета при удалении потока.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню