Декодирование вывода из valgrind

Я пытаюсь понять вывод valgrind, выполнив его следующим образом: valgrind --leak-check=yes "someprogram"

Вывод здесь:

==30347== 
==30347== HEAP SUMMARY:
==30347==     in use at exit: 126,188 bytes in 2,777 blocks
==30347==   total heap usage: 4,562 allocs, 1,785 frees, 974,922 bytes       
        allocated
==30347== 
==30347== LEAK SUMMARY:
==30347==    definitely lost: 0 bytes in 0 blocks
==30347==    indirectly lost: 0 bytes in 0 blocks
==30347==      possibly lost: 0 bytes in 0 blocks
==30347==    still reachable: 126,188 bytes in 2,777 blocks
==30347==         suppressed: 0 bytes in 0 blocks
==30347== Reachable blocks (those to which a pointer was found) are   
          not shown.
==30347== To see them, rerun with: --leak-check=full --show-reachable=yes
==30347== 
==30347== For counts of detected and suppressed errors, rerun with: -v
==30347== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 2 from 2)

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

Заранее благодарю за любую помощь.


person Smithy    schedule 06.07.2015    source источник


Ответы (1)


No.

Вас больше всего беспокоят недостижимые блоки. Здесь вы видите, что есть активные переменные, которые все еще «указывают» на доступные блоки памяти. Они все еще находятся в сфере охвата.

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

Вот цитата из документации Valgrind:

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

person David Hoelzer    schedule 06.07.2015
comment
Спасибо, Давид, за быстрый ответ. - person Smithy; 06.07.2015
comment
«Добавить комментарий» не позволяет мне ввести другой пример, потому что он слишком длинный. Как мне вставить еще один пример? - person Smithy; 06.07.2015