理解valgrind输出

时间:2010-03-19 18:27:28

标签: c memory-leaks valgrind

我之前发过一篇关于检查内存泄漏等的帖子,我确实说我不熟悉linux中的终端但是有人告诉我这很容易用valgrind

我设法让它运行等但不确定输出意味着什么。瞥了一眼,对我来说一切看起来都不错,但是如果可能的话,我想通过你经验丰富的人来确认。输出如下

^C==2420== 
==2420== HEAP SUMMARY:
==2420==     in use at exit: 2,240 bytes in 81 blocks
==2420==   total heap usage: 82 allocs, 1 frees, 2,592 bytes allocated
==2420== 
==2420== LEAK SUMMARY:
==2420==    definitely lost: 0 bytes in 0 blocks
==2420==    indirectly lost: 0 bytes in 0 blocks
==2420==      possibly lost: 0 bytes in 0 blocks
==2420==    still reachable: 2,240 bytes in 81 blocks
==2420==         suppressed: 0 bytes in 0 blocks
==2420== Reachable blocks (those to which a pointer was found) are not shown.
==2420== To see them, rerun with: --leak-check=full --show-reachable=yes
==2420== 
==2420== For counts of detected and suppressed errors, rerun with: -v
==2420== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 13 from 8)

这里好吗?关于我的唯一问题是仍然可以到达的部分。那可以吗?

谢谢大家

3 个答案:

答案 0 :(得分:8)

我建议你停下来,阅读Valgrind Quick Start,特别注意第4节“Interpreting Memcheck's output”,并查看FAQ


之后,我认为您可以从阅读How to Ask Questions The Smart Way(又称智能问题)中获益,以提高您的解决问题的能力,并改善您在StackOverflow等社区论坛中寻求帮助的机会,在这些论坛中可以获得更好的问题有更好的答案。

这不是针对侮辱或人身攻击,而是关于如何更好地提出问题的建议,以便您可以获得更好的答案。您还将学习如何在此过程中更频繁地回答您自己的基本问题,从而加快您的整体工作。祝你好运。

答案 1 :(得分:7)

您粘贴的输出显示:

  

== 2420 ==总堆使用量:82个分配,1个释放,分配2,592个字节

     

...

     

== 2420 ==仍然可以访问:81个块中的2,240个字节

82个分配,只有一个空闲,所以最后还有81个块在堆上仍然“可达”。作为Valgrind FAQ状态,这可能表明代码使用了一些内存池分配器,因此一旦它未使用就不释放内存,而是保留它供以后使用,或者实际上可能是内存泄漏(不太可能) ,但是)。按照链接中的步骤检查这是否是由于STL使用内存缓存。

答案 2 :(得分:2)