抑制泄漏对Valgrind意味着什么?

我在文件fifo.hfifo.c开发了一个FIFO列表(队列)的纯C实现,并编写了一个测试程序testfifo.c ,我将其编译为./bin/testfifo 。 节点结构在list.h定义。

我在OS X 10.6上通过Valgrind运行我的程序

 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上的额外alloc似乎是由于一些系统库,正如所建议的那样。

我使用-v选项运行了相同的命令,以显示4个被抑制的错误,但我没有任何容易理解的新信息。

这些是您的代码之外,(可能是共享的)库中的泄漏或已知的误报。 使用-v运行valgrind应告知您使用的抑制。