在valgrind仍然可以到达

时间:2010-12-10 06:48:30

标签: debugging memory memory-management memory-leaks valgrind

虽然搜索valgrind仍然可以访问,但有些人说这不是问题。我们不需要解决它。有人说它需要修复。如果有人可以明确地告诉我这仍然可以达到的逻辑,我会更好。是否必须修复此问题?

[编辑]

我的C程序有以下valgrind输出。我需要修复它吗?

      LEAK SUMMARY:
      ==27333==    definitely lost: 0 bytes in 0 blocks.
      ==27333==      possibly lost: 0 bytes in 0 blocks.
      ==27333==    still reachable: 96 bytes in 12 blocks.
      ==27333==         suppressed: 0 bytes in 0 blocks.

1 个答案:

答案 0 :(得分:9)

这取决于。 “仍然可以访问”意味着你在退出之前没有释放一块内存,但有一个指向它的指针。

在C ++程序中,这意味着某些对象可能不是delete d,因此它的析构函数可能没有被运行,因此说某些数据可能尚未保存到磁盘上,例如某些其他操作可能没有被采取,因此你的程序可能会产生意想不到的行为。

但是C程序中没有析构函数,所以你的程序不能依赖于它。同时释放内存需要一些时间,因此在退出时不释放内存可以节省一些时间 - 程序将更快退出(对于包含大量数据的程序,这可能很重要)。

所以IMO如果你的C程序“仍然可以访问”阻塞它不是问题,但是这表明程序中的某些代码没有释放内存,因此重用该代码时可能会出现错误。