【问题标题】:Valgrind possibly lost memory in simple programsValgrind 可能会在简单程序中丢失内存
【发布时间】:2017-09-16 12:57:41
【问题描述】:

我运行 Valgrind 的任何程序都告诉我,在 3 个块中有 72 个可能丢失的字节,即使是像这样的简单程序:

int main(void)
{
    printf("Hello, World!\n");
    return 0;
}

你知道这是否是 Mac OS sierra 上的 Valgrind 错误吗?

我怎么会用这样的程序泄漏内存?

【问题讨论】:

  • 它说“可能丢失”。可能是crt中的东西。如果它一直存在,并且没有增长,请不要担心。

标签: c valgrind


【解决方案1】:

如果任何预加载的库(例如通过 LD_PRELOAD)或链接的 C 运行时的任何部分存在内存泄漏,这很可能发生。

还有一些由 CRT 执行的内存分配从未被有意释放,但通常这些只是一次性的事情,每个进程只发生一次。

Valgrind 无法可靠地区分您的应用程序的哪些部分和哪些不是。您只能检查分配内存的堆栈跟踪,并确定这是否是您的域。

【讨论】:

  • 您可以为此类错误生成抑制,因为它们不属于您的程序。事实上,valgrind 带有许多针对已知问题的抑制功能。
  • 请注意,已分配但未释放但仍保留引用的内存不是泄漏。在进程终止时留下“仅一次”分配由操作系统真空吸尘器清理的情况并不少见,甚至不一定是坏事。
猜你喜欢
  • 2012-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-05
  • 2019-12-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多