Требуется помощь в выводе valgrind - PullRequest
0 голосов
/ 26 августа 2011

видите, я просто использую valgrind для обнаружения утечки памяти в моем коде.поэтому я использовал

valgrind -v --leak-check=full --show-reachable=yes  ./my_binary

я вижу следующее, что я не могу понять

`==16545== 
==16545== HEAP SUMMARY:
==16545==     in use at exit: 20,171 bytes in 647 blocks
==16545==   total heap usage: 993 allocs, 346 frees, 30,090 bytes allocated
==16545== 
==16545== Searching for pointers to 647 not-freed blocks
==16545== Checked 124,548 bytes
==16545== 
==16545== 1 bytes in 1 blocks are still reachable in loss record 1 of 253
==16545==    at 0x400677E: malloc (vg_replace_malloc.c:195)
==16545==    by 0x80AAB31: xmalloc (in /bin/bash)
==16545==    by 0x80796D0: make_variable_value (in /bin/bash)
==16545==    by 0x80798C8: ??? (in /bin/bash)
==16545==    by 0x807BA40: initialize_shell_variables (in /bin/bash)
==16545==    by 0x805E897: ??? (in /bin/bash)
==16545==    by 0x805FA10: main (in /bin/bash)
==16545== 
==16545== 1 bytes in 1 blocks are still reachable in loss record 2 of 253
==16545==    at 0x400677E: malloc (vg_replace_malloc.c:195)
==16545==    by 0x80AAB31: xmalloc (in /bin/bash)
==16545==    by 0x80A578B: set_locale_var (in /bin/bash)
==16545==    by 0x80A5912: set_default_lang (in /bin/bash)
==16545==    by 0x805FA15: main (in /bin/bash)
==16545== 
==16545== 1 bytes in 1 blocks are still reachable in loss record 3 of 253
==16545==    at 0x400677E: malloc (vg_replace_malloc.c:195)
==16545==    by 0x80AAB31: xmalloc (in /bin/bash)
==16545==    by 0x8061B9B: ??? (in /bin/bash)
==16545==    by 0x8062D95: ??? (in /bin/bash)
==16545==    by 0x8065481: ??? (in /bin/bash)
==16545==    by 0x806801A: yyparse (in /bin/bash)
==16545==    by 0x8060580: parse_command (in /bin/bash)
==16545==    by 0x806064F: read_command (in /bin/bash)
==16545==    by 0x80608AE: reader_loop (in /bin/bash)
==16545==    by 0x805FEFB: main (in /bin/bash)`e

я просто хочу понять это.?почему это не дает мне конкретной строки нет в коде ma, который не освободил?

Ответы [ 4 ]

4 голосов
/ 26 августа 2011

Эти ошибки происходят от /bin/bash, а не от вашего собственного кода.Вы запускаете какие-нибудь скрипты bash из своего кода? Здесь - объяснение того, что это значит.Я думаю, вы можете просто проигнорировать это.

«все еще достижимо» означает, что ваша программа, вероятно, в порядке - она ​​не освободила память, которую могла иметь.Это довольно часто и часто разумно.Не используйте --show-reachable = yes, если вы не хотите видеть эти отчеты.

1 голос
/ 26 августа 2011

Похоже, эти адреса принадлежат коду вашей программы.Возможно, компиляция с отладочной информацией позволяет valgrind видеть номера строк.(Подсказка: -g включить gcc)

0 голосов
/ 30 мая 2012

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

libtool --mode=execute valgrind -v --leak-check=full --show-reachable=yes  ./my_binary
0 голосов
/ 26 августа 2011

Вы проверили http://valgrind.org/docs/manual/quick-start.html#quick-start.intro?Там есть хорошая документация.Вы не должны были использовать оптимизацию во время компиляции.

...