*** glibc обнаружен *** двойное освобождение или повреждение (fasttop):

Вызов clear для QByteArray генерирует следующее исключение:

* Обнаружен glibc * / home / yan / FPS2 / FPS2: двойное освобождение или повреждение (fasttop):

0?? 1??
2 бесплатно
3 QByteArray:: clear ()
4 FPSengine:: getDatagrams
5 FPSengine:: xmitData
6 FPSengine:: getData
7 threadDatalog:: run
8??
9 start_thread
10 клонов
11?? 0

Это ошибка QT или это может быть связано с моим кодом? Я знаю, что QObjects не являются поточно-ориентированными (определение QT - это не несколько потоков, вызывающих одну и ту же функцию одного и того же экземпляра объекта), но моя функция имеет мьютексы. Также я очень редко получаю эту ошибку, хотя часто вызывается одна и та же функция. PS Способ предотвратить это - env ​​var MALLOC_CHECK_ 0

Этот URL-адрес относится к аналогичной проблеме, и некоторые сообщения, вероятно, подразумевают, что она вызвана несовместимой версией glibc.

*** Обнаружен glibc *** perl: двойное освобождение или повреждение (!prev): 0x0c2b7138 ***

3 ответа

Решение

Это вызвано тем фактом, что приложение является многопоточным, объект принадлежит к mainthread, но используется в другом потоке, хотя я использовал мьютексы на QBytearray, UDPsocket, который использует его для чтения readDatagram, также находится в mainthread... и да, мне нужно, чтобы udpSocket также был в основном потоке

Это может быть несколько разных вещей, в том числе ссылки на временные QByteArray возвращается вызовом функции, но вряд ли (IMO) будет ошибкой в ​​Qt.

Вот несколько мыслей для отладки:

  • запустите его под Valgrind и посмотрите, будет ли это освещать проблему
  • запустите ваше приложение для версии Qt, для которой доступны символы отладки
  • включите дампы ядра и посмотрите, получите ли вы файл ядра

Я очень сомневаюсь, что вы нашли ошибку в Qt. Эта ошибка может возникать по ряду причин, но важно означает, что у вас есть ссылка на память, которая уже была освобождена. Запустите отладчики и попробуйте посмотреть, что является причиной проблемы. Используйте gdb и valgrind, и, надеюсь, вы сможете отследить проблему.

Другие вопросы по тегам