*** 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, и, надеюсь, вы сможете отследить проблему.