Ошибки памяти C ++ при выходе из программы - PullRequest
1 голос
/ 07 мая 2011

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

*** glibc detected *** ./sll_client: free(): invalid next size (fast): 0x0000000000787720 ***
======= Backtrace: =========
/lib/x86_64-linux-gnu/libc.so.6(+0x78a8f)[0x7f9e9cbb5a8f]
/lib/x86_64-linux-gnu/libc.so.6(cfree+0x73)[0x7f9e9cbb98e3]
/usr/lib/x86_64-linux-gnu/libstdc++.so.6(_ZNSsD1Ev+0x39)[0x7f9e9d409019]

======= Memory map: ========

7f9e9d893000-7f9e9d895000 rw-p 00021000 07:00 7473                       /lib/x86_64-linux-    gnu/ld-2.13.so
7fff68119000-7fff6813a000 rw-p 00000000 00:00 0                          [stack]
7fff68167000-7fff68168000 r-xp 00000000 00:00 0                          [vdso]
ffffffffff600000-ffffffffff601000 r-xp 00000000 00:00 0                  [vsyscall]
Aborted

Конкретная ошибка «glibc» меняется почти каждый раз.

Я уже запускал приложение через Valgrind, и утечки памяти почти не обнаружены.Те, что там, похоже, не вызывают никаких проблем.Есть ли общая причина этой проблемы?Я мог бы опубликовать некоторый код, но это более трех тысяч строк C ++, и впервые за три недели эта проблема возникла.

Вывод Valgrind

Вывод GDB

Ответы [ 2 ]

4 голосов
/ 07 мая 2011

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

Недопустимые чтения размера 4 также проблематичны, но не вызываютвыходной вы получаете.Исправьте их в любом случае все же.: -)

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

1 голос
/ 07 мая 2011

Отследили ли вы основную причину сообщения Invalid read of size 4, которое постоянно появляется в ваших журналах valgrind ??
Эти неверные чтения являются основной причиной вашей проблемы.

...