LINUX.ORG.RU

Проблемы с glibc


0

0

У меня есть небольшая программа на Си. На FreeBSD все работало замечательно. Попробовал скомпилить в бубунте - после запуска выдает

*** glibc detected *** /home/dima/calculus/calculus: double free or corruption (out): 0x08be0658 ***

(gdb) backtrace
#0 0xb80b7430 in __kernel_vsyscall ()
#1 0xb7f32880 in raise () from /lib/tls/i686/cmov/libc.so.6
#2 0xb7f34248 in abort () from /lib/tls/i686/cmov/libc.so.6
#3 0xb7f7010d in ?? () from /lib/tls/i686/cmov/libc.so.6
#4 0xb7f763f4 in ?? () from /lib/tls/i686/cmov/libc.so.6
#5 0xb7f78456 in free () from /lib/tls/i686/cmov/libc.so.6
#6 0xb7f66004 in fclose () from /lib/tls/i686/cmov/libc.so.6
#7 0x08048ee5 in main () at calculus.c:129

Т.е. ошибка при закрытии файла. Притом открывается и записывается все нормально. А остановиться не может =)

Гугл посоветовал мне сделать export MALLOC_CHECK_=0 и это помогло. Но пахнет очень грязным хаком. Почему весь софт работает нормально (думаю там fclose используется часто), а моя крошечная программа отказывается?

★★

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

bsd игнорит отдельные проблемы типа неправильных указателей, вызова free(ptr) дважды или с неверным указателем... glibc крашит программу, в принципе по большму счету для чистоты так и надо

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

Ну там не повезло - ошибка не проявилась, а в линуксе где то проверку вставили - вот она и вылезла.

Legioner ★★★★★
()

Спасибо, действительно был выход за границы массива.

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