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

Gen*_*nba 18 c valgrind

我在文件研制出纯C语言实现FIFO列表(队列)的fifo.hfifo.c,并写了一个测试程序testfifo.c,我编译成./bin/testfifo.节点结构定义于list.h.

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

valgrind --tool=memcheck --leak-check=full --show-reachable=yes ./bin/testfifo
Run Code Online (Sandbox Code Playgroud)

并获得以下输出

==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)
Run Code Online (Sandbox Code Playgroud)

根据泄漏总结,没有泄漏,但我仍然想知道"抑制"泄漏是什么.此外,alloc和free的数量不匹配,因此我不确定是否存在泄漏.

- - 编辑 - -

运行

valgrind --tool=memcheck --leak-check=full --show-reachable=yes -v ./bin/testfifo
Run Code Online (Sandbox Code Playgroud)

在OS X 10.6上产生了一个相当长且令人困惑的输出,但我已经运行了

valgrind --tool=memcheck --leak-check=full --show-reachable=yes ./bin/testfifo
Run Code Online (Sandbox Code Playgroud)

在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)
Run Code Online (Sandbox Code Playgroud)

alloc和free现在匹配,所以OS X上的额外alloc似乎是由于一些系统库,正如已经建议的那样.

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

cni*_*tar 22

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

  • 错误检查工具可以检测系统库中的许多问题,例如C库,这些问题已预先安装在您的操作系统中.您无法轻松修复这些错误,但您不希望看到这些错误(是的,有很多错误!)因此,Valgrind会在启动时读取要抑制的错误列表.构建系统时,./ configure脚本会创建默认抑制文件. (7认同)
  • 其中一些也不是库的问题,但对于已知可能在应用程序外部的进程之间共享内存的库. (2认同)