2010-03-19 86 views
4

我发了一个帖子较早询问有关检查内存泄漏等,我是说我不是熟悉的终端在Linux,但有人对我说,这是容易的valgrind理解的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) 

这一切都很好吗?关于我唯一的事情是仍然可以到达的部分。这可以吗?

谢谢大家

回答

6

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


之后,我想你可以从阅读How to Ask Questions The Smart Way(又名聪明的问题)有利于提高你的解决问题的能力,并提高您的要求在社区论坛,如StackOverflow援助,其中更好的问题是奖励与更好的答案。

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

+0

或简短的回答 - RTFM – pm100 2010-03-19 18:56:58

+4

如果原始海报不知道手册的位置,这样的答案是没用的。我试图给人们带来怀疑的好处,特别是因为OP至少试图很好地描述这个问题。如果您对某个主题感兴趣,特别是像内存管理这样复杂的内容,那么有时技术文档可能会让您感到压抑,因此他们所需要的只是推动正确的文档。 – mctylr 2010-03-19 20:46:39

7

输出您粘贴显示:

== == 2420总堆的使用情况:82个allocs,1周的FreeS,分配

2,592字节...

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

82个分配并且只有一个空闲,所以最后还有81个块在堆上仍然'可到达'。正如Valgrind FAQ所述,这可能表明代码使用了一些内存池分配器,因此一旦它没有被使用就没有释放内存,而是保留它以备后用,否则它可能实际上是内存泄漏(尽管如此)。按照链接中的步骤检查这是由于STL使用内存缓存。

+0

感谢提示 – sbsp 2010-03-19 19:09:17

+0

不客气:P – laginimaineb 2010-03-19 19:15:18

+1

由于问题被标记为C,我假定C++ STL或String类对于sbsp不是问题。好答案。 – mctylr 2010-03-19 20:51:59