10

我之前发了一个帖子询问检查内存泄漏等问题,我确实说我不熟悉 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)

这里一切都好吗?唯一与我有关的是仍然可以到达的部分。那样行吗?

感谢大家

4

3 回答 3

11

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


之后,我认为您可以从阅读如何提出问题的智能方法(又名智能问题)中受益,以提高您解决问题的能力,并提高您在StackOverflow等社区论坛中寻求帮助的能力,更好的问题会得到更好的答案。

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

于 2010-03-19T18:39:22.590 回答
7

您粘贴的输出显示:

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

...

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

82 个分配,只有一个空闲,所以最终堆上仍有 81 个块“可访问”。正如Valgrind 常见问题解答所述,这可能表明代码使用了一些内存池分配器,因此不会在未使用时立即释放内存,而是保留它以供以后使用,或者它实际上可能是内存泄漏(虽然不太可能) . 按照链接中的步骤检查这是否是由于 STL 使用了内存缓存。

于 2010-03-19T19:00:13.890 回答
2

http://valgrind.org/docs/manual/faq.html#faq.deflost可能对您有用。

于 2010-03-19T18:35:38.727 回答