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个非释放块在哪里?代码的哪一部分正在生成它们?
答案 0 :(得分:3)
将它返回给系统。
如果你有一个对内存的引用,它在技术上不是内存泄漏。要成为内存泄漏,您必须取消引用内存。
void *str = malloc(10);
str = NULL;
在任何时候留下未释放的块都是不好的。如果程序正在完成它,它可能不会那么糟糕,但它对你将来可能做的任何改变都没有好处(例如:提取一个函数并多次调用它)。
此外,摆脱所有内存泄漏将使valgrind更容易跟踪任何新的(和相关的)。
答案 1 :(得分:3)
是的,留下未释放的块是不好的。它被称为内存泄漏。如果您允许,您的程序最终将使用系统中的所有可用内存。 程序死后,程序分配的内存被释放。