LINUX.ORG.RU

Очень странный баг: *** glibc detected *** corrupted double-linked list


0

0

Уже не первый раз сталкиваюсь с совершенно непонятной мне ошибкой. Суть в том, что при некоторых уж очень странных обстоятельствах программа при завершении своей работы выдает такое (конец чуть обрезал, там много однообразного):

*** glibc detected *** mpkg: corrupted double-linked list: 0x0902f018 ***
======= Backtrace: =========                                             
/lib/libc.so.6(+0x701c4)[0xb732c1c4]                                     
/lib/libc.so.6(+0x733d0)[0xb732f3d0]                                     
/lib/libc.so.6(cfree+0x72)[0xb7332492]                                   
/lib/libc.so.6(+0x2ee6d)[0xb72eae6d]                                     
/lib/libc.so.6(+0x2eeaf)[0xb72eaeaf]                                     
/lib/libc.so.6(__libc_start_main+0xed)[0xb72d2b9d]                       
mpkg[0x80507c1]                                                          
======= Memory map: ========                                             
08048000-08069000 r-xp 00000000 08:05 3092       /usr/bin/mpkg           
08069000-0806a000 rw-p 00021000 08:05 3092       /usr/bin/mpkg           
0902f000-0a21d000 rw-p 00000000 00:00 0          [heap]                  
b6c00000-b6c21000 rw-p 00000000 00:00 0                                  
b6c21000-b6d00000 ---p 00000000 00:00 0                                  
b6d46000-b6d71000 r--p 00000000 08:05 50483      /usr/share/locale/ru/LC_MESSAGES/libc.mo
b6d71000-b6d9b000 r--p 00000000 08:05 600        /usr/share/locale/ru/LC_MESSAGES/mpkg.mo
b6d9b000-b6dda000 r--p 00000000 08:05 57950      /usr/lib/locale/ru_RU.utf8/LC_CTYPE     
b6dda000-b6ddc000 rw-p 00000000 00:00 0                                                  
b6ddc000-b6df2000 r-xp 00000000 08:05 112741     /lib/libpthread-2.11.so                 
b6df2000-b6df3000 r--p 00015000 08:05 112741     /lib/libpthread-2.11.so                 
b6df3000-b6df4000 rw-p 00016000 08:05 112741     /lib/libpthread-2.11.so                 
b6df4000-b6df7000 rw-p 00000000 00:00 0

Условия при которых такое случается - очень странные: сейчас это дело происходит исключительно если в директории есть директория с определенным именем, причем это имя никак с самой программой не связано.

Подскажите, что это, и как это отлаживать?

Уже начинаю грешить на баг в glibc, но интуиция подсказывает что это таки моя ошибка.

Ответ на: комментарий от anonymous

Вроде как да, но совершенно неясно где это у меня может быть. Везде обычные std::string (а судя по валгринду - валится именно на их освобождении). В общем, буду копать, спасибо за наводки.

aix27249
() автор топика
Ответ на: комментарий от aix27249

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

aix27249
() автор топика
Ответ на: комментарий от aix27249

>Везде обычные std::string

А кроме std::string нигде больше динамически ничего не выделяется?

Elverion
()
Ответ на: комментарий от aix27249

Что valgrind выводит? Должен выводить два стека, первый - где буфер алоцирован, второй - где выход за границы массива. Если собираешь с -g - выведет даже строчки, если соберешь с -O0 - выведет даже правильные строчки. =)

YesSSS ★★★
()
Ответ на: комментарий от YesSSS

Всё, всем огромное спасибо, нашел :) Таки в одном месте была динамическая аллокация и кривой delete[], а я был в полной уверенности что уже избавился от этой стремной конструкции.

aix27249
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.