【问题标题】:Still reachable in valgrind在 valgrind 中仍然可以访问
【发布时间】:2011-05-23 07:50:58
【问题描述】:

在 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.

【问题讨论】:

  • 你甚至没有说这是一个 C 或 C++ 程序。
  • 以上结果是针对我的C程序的。

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


【解决方案1】:

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

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

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

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

【讨论】:

    猜你喜欢
    • 2023-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-07
    • 2015-08-03
    • 2016-05-13
    • 1970-01-01
    相关资源
    最近更新 更多