以这段代码为例:
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
?
或者也许我必须在代码结束之前在 main
函数中执行 free(something);
?
最佳答案
不,您不必在 doSomething()
中释放内存,free(point)
应该释放内存 malloc()
ed在 doSomething()
中提供指针不递增(涉及指针运算),因为您必须传递给 free()
的指针必须已由 *alloc()
函数之一返回。
在检查 point != NULL
之前,您应该注意访问 main()
中的 point
。
注意:当您说清除时,您应该知道内存并没有被清除,它被释放只是为了再次使用,清除它是不必要的而且代价高昂。
关于c - 释放函数中分配的内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35379698/