【发布时间】:2012-12-05 23:14:08
【问题描述】:
众所周知,如果我们将指针按值传递给函数,则它不能在函数内部被释放,如下所示:
void func(int *p)
{
free(p);
p = NULL;
}
p 拥有一个(可能是有效的)地址的副本,因此 free(p) 试图释放它。但由于它是一个副本,它不能真正释放它。对 free() 的调用如何知道它不能真正释放它?
上面的代码不会产生错误。这是否意味着 free() 只是默默地失败,“不知何故”知道作为参数传入的地址无法处理?
【问题讨论】:
-
嗯...这样就可以了。当然,传递给函数的指针不会为 NULL,但内存会被释放。
-
StackOverflow 经验法则 #3:如果 OP 说“已知”,则不是。
-
不会释放内存,但是要将原始指针设置为空,您需要指针本身的地址,而不是指针的副本。
标签: c pointers memory-management