Что означают подавленные утечки в Valgrind?

Я разработал чисто-C реализацию списков (очередей) FIFO в файлах fifo.h и fifo.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's и free's теперь совпадают, так что дополнительный alloc на OS X, похоже, связан с какой-то системной библиотекой, как было предположено.

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

18
задан Genba 28 December 2011 в 16:12
поделиться