it-roy-ru.com

Что может вызвать ошибку "поврежденный список двойных ссылок"?

У меня проблемы с довольно сложным кодом. Мне не удалось создать короткий фрагмент, который воспроизводит ошибку, поэтому я попытаюсь объяснить проблему словами.

Код случайно вылетает с ошибкой

*** glibc detected *** gravtree: corrupted double-linked list: 0x000000001aa0fc50 ***

Отладка показала, что это происходит от строки, где коды освобождают объект. Кажется, с объектом все в порядке. Он существует, и я могу получить доступ к его данным в момент возникновения ошибки. Деструктор объекта тривиален и ничего не делает. 

Я застрял. В каких обстоятельствах вы ожидаете, что «свободный» потерпит неудачу?

20
hanno

Попробуйте запустить вашу программу под Valgrind . Это может указать вам на более раннюю причину, тогда как GDB ломается только там, где повреждение уже произошло.

11
Warren Young

Как сказал Уоррен, Вальгринд обычно лучший способ найти его. Двусвязный список - это база обычно сетевых или двоичных обработчиков данных, т.е. в QT QByteArray или QTcpSocket. У меня было то же самое сегодня, и это было потому, что я сделал объект недействительным, удалив его с карты, но ранее получил указатели на данные внутри него. Это работало иногда, иногда нет. Чем выше нагрузка на систему, тем больше вероятность ее сбоя.

0
Chris Benesch