以此代码为例:
int *doSomething(void) {
int *something = malloc(sizeof(int));
return something;
}
int main() {
int *point = doSomething();
//code does something...
free(point);
}
我想知道是否必须释放doSomething()
中分配的内存,就像return something;
之后我必须free(something);
一样?或者free(point);
也会清除something
?
或者在代码结束之前我可能必须在free(something);
函数中执行main
?
答案 0 :(得分:4)
不,您不必在doSomething()
中释放内存,free(point)
应释放malloc()
中的内存doSomething()
,前提是指针未递增( 涉及指针算法),因为必须传递给free()
的指针必须由其中一个* alloc()
函数返回。
在检查point
之前,您需要注意的是main()
中的point != NULL
。{/ p>
注意:当你说清除时,你应该知道内存没有被清除,它只是被释放才能再次使用,清除它将是不必要的和昂贵的
答案 1 :(得分:-4)
根据经验,任何对malloc
的调用都必须在稍后通过调用free
来取得成功。当然,您提供给free
的参数必须是malloc
的返回值。但是,在您的特定情况下,您已经到达程序的末尾(main
函数结束),因此您不必担心该内存,因为它无论如何都将返回到操作系统。调用free
更像是迂腐习惯,它还表明你知道你的程序正在使用什么内存。
当你做类似的事情时情况会变得更糟:
int *p = malloc(...);
/* do some stuff */
p = malloc(...);
在上面的示例中,第一个malloc分配的内存块将永远丢失(也就是说只要程序运行)。