Что означают подавленные утечки в Valgrind? - PullRequest
17 голосов
/ 28 декабря 2011

Я разработал реализацию списков (очередей) FIFO в файлах fifo.h и fifo.c на чистом языке C и написал тестовую программу testfifo.c, который я компилирую в ./bin/testfifo. Структура узла определена в list.h.

Я запускаю свою программу через Valgrind на OS X 10.6 следующим образом

valgrind --tool=memcheck --leak-check=full --show-reachable=yes ./bin/testfifo

и получите следующий вывод

==54688== Memcheck, a memory error detector
==54688== Copyright (C) 2002-2011, and GNU GPL'd, by Julian Seward et al.
==54688== Using Valgrind-3.7.0 and LibVEX; rerun with -h for copyright info
==54688== Command: bin/testfifo
==54688== 
--54688-- bin/testfifo:
--54688-- dSYM directory is missing; consider using --dsymutil=yes
==54688== 
==54688== HEAP SUMMARY:
==54688==     in use at exit: 88 bytes in 1 blocks
==54688==   total heap usage: 11 allocs, 10 frees, 248 bytes allocated
==54688== 
==54688== LEAK SUMMARY:
==54688==    definitely lost: 0 bytes in 0 blocks
==54688==    indirectly lost: 0 bytes in 0 blocks
==54688==      possibly lost: 0 bytes in 0 blocks
==54688==    still reachable: 0 bytes in 0 blocks
==54688==         suppressed: 88 bytes in 1 blocks
==54688== 
==54688== For counts of detected and suppressed errors, rerun with: -v
==54688== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 0 from 0)

Согласно сводке утечек, утечек нет, но мне все еще интересно, что такое "подавленные" утечки. Кроме того, количество alloc и free не совпадают, и поэтому я не уверен, есть ли утечки или нет.

---- EDIT ----

Запуск

valgrind --tool=memcheck --leak-check=full --show-reachable=yes -v ./bin/testfifo

в OS X 10.6 выдает довольно длинный и запутанный вывод, но я запустил

valgrind --tool=memcheck --leak-check=full --show-reachable=yes ./bin/testfifo

на машине с Linux и получил этот вывод:

==32688== Memcheck, a memory error detector
==32688== Copyright (C) 2002-2010, and GNU GPL'd, by Julian Seward et al.
==32688== Using Valgrind-3.6.1 and LibVEX; rerun with -h for copyright info
==32688== Command: bin/testfifo
==32688== 
==32688== 
==32688== HEAP SUMMARY:
==32688==     in use at exit: 0 bytes in 0 blocks
==32688==   total heap usage: 10 allocs, 10 frees, 160 bytes allocated
==32688== 
==32688== All heap blocks were freed -- no leaks are possible
==32688== 
==32688== For counts of detected and suppressed errors, rerun with: -v
==32688== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 4 from 4)

alloc и free теперь совпадают с , поэтому дополнительное размещение в OS X, по-видимому, связано с некоторой системной библиотекой, как было предложено.

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

1 Ответ

21 голосов
/ 28 декабря 2011

Это утечки вне вашего кода, в (возможно, совместно используемых) библиотеках или известные ложные срабатывания. Запуск valgrind с -v должен сообщить вам об использованных подавлениях.

...