*** glibc обнаружен *** double free или повреждение (fasttop): - PullRequest
3 голосов
/ 04 февраля 2010

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

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

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

Ответы [ 3 ]

4 голосов
/ 04 февраля 2010

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

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

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

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

1 голос
/ 04 февраля 2010

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

...