Что означают подавленные утечки в Вальгринде? - программирование
Подтвердить что ты не робот

Что означают подавленные утечки в Вальгринде?

Я разработал реализацию списков (очередей) FIFO в чистых версиях fifo.h и fifo.c, и написали тестовую программу testfifo.c, которую я компилирую в ./bin/testfifo. Структура node определена в 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 не совпадает, и, следовательно, я не уверен, есть ли утечки или нет.

---- ---- РЕДАКТИРОВАТЬ

Запуск

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 подавленные ошибки, но у меня нет легко понятной новой информации.

4b9b3361

Ответ 1

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