理解valgrind输出

sbs*_*bsp 4 c valgrind memory-leaks

我之前发了一篇关于检查内存泄漏等问题的帖子,我确实说我不熟悉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)
Run Code Online (Sandbox Code Playgroud)

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

感谢大家

mct*_*ylr 9

我建议你停下来,阅读Valgrind 快速入门,特别注意第4节" 解释Memcheck的输出 ",并查看常见问题解答.


后来,我想你可以从阅读中受益如何提问智能路(又名聪明的问题),以提高你解决问题的能力,并提高您的要求在社区论坛,如援助的StackOverflow,其中更好的问题是奖励与更好的答案.

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

  • 如果原始海报不知道手册的位置,这样的答案是没用的.我试图给人们带来怀疑的好处,特别是因为OP至少试图很好地描述这个问题.如果您是某个主题的新手,有时候技术文档可能会非常庞大​​,特别是像内存管理这样复杂的东西,所以他们所需要的只是推动正确的文档. (7认同)

lag*_*neb 7

您粘贴的输出显示:

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

...

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

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