valgrind报告未释放的块

时间:2011-08-08 22:24:31

标签: c memory-leaks valgrind memory-mapped-files

Valgrind 泄漏文件摘要:

ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 0 from 0)
malloc/free: in use at exit: 45,065 bytes in 12 blocks.
malloc/free: 161 allocs, 149 frees, 53,301 bytes allocated.
searching for pointers to 12 not-freed blocks.
checked 583,764 bytes.

这12个街区中的一个来自strdup。我应该释放由strdup分配的东西,我同意。

我的问题是,一般来说,留下非释放的街区是不是很糟糕?它在技术上被称为 mem-leak 吗?

一旦程序死亡,它们是否没有返回系统?

请指教。

编辑0:感谢您的回复。我怎么知道这12个非释放块在哪里?代码的哪一部分正在生成它们?

2 个答案:

答案 0 :(得分:3)

将它返回给系统。

如果你有一个对内存的引用,它在技术上不是内存泄漏。要成为内存泄漏,您必须取消引用内存。

void *str = malloc(10);
str = NULL;

在任何时候留下未释放的块都是不好的。如果程序正在完成它,它可能不会那么糟糕,但它对你将来可能做的任何改变都没有好处(例如:提取一个函数并多次调用它)。

此外,摆脱所有内存泄漏将使valgrind更容易跟踪任何新的(和相关的)。

答案 1 :(得分:3)

是的,留下未释放的块是不好的。它被称为内存泄漏。如果您允许,您的程序最终将使用系统中的所有可用内存。 程序死后,程序分配的内存被释放。