如果函数的返回值(例如myFunc
)是已分配的空间。父函数是否仍然需要释放那部分内存?
例如:
char * myFunc() {
return malloc(5);
// free() not called
}
int main() {
char * str = myFunc();
// does str need to be freed?
return 0;
}
答案 0 :(得分:3)
要释放()还是不要释放()?
当进程终止时,它的所有内存都返回给系统,包括malloc包中函数分配的堆内存。在分配内存并继续使用它直到程序终止的程序中,通常会忽略对free()
的调用,依赖此行为自动释放内存。这在分配许多内存块的程序中尤其有用,因为在CPU时间方面添加多个free()
调用可能会很昂贵,并且编码可能很复杂。
尽管依赖进程终止来自动释放内存对于许多程序来说是可以接受的,但有几个原因可能需要明确释放所有已分配的内存:
1。明确调用free()
可能会使程序在未来的修改中更具可读性和可维护性。
2. 如果我们使用malloc调试库来查找程序中的内存泄漏,那么任何未明确释放的内存都将被报告为内存泄漏。这可能会使查找真实内存泄漏的任务变得复杂。
3。要避免memory leak。
答案 1 :(得分:1)
建议要释放str
:将// does str need to be freed?
替换为free(str)
。这是避免潜在内存泄漏的良好编程习惯。
在您的情况下,操作系统将清理此短程序所占用的已分配内存。