-1

代码如下:

char *p=malloc(200);
p=NULL;

现在我已经 NULLed 了p,有什么方法可以再次使用这 200 字节的内存吗?如果没有,我至少可以释放他们吗?

4

5 回答 5

3

在调用p=NULL; 使用之前free(p);

但是在释放内存之前,如果您将指针分配给NULL,它将丢失...

于 2013-02-04T09:33:45.260 回答
2

不,你不能把它捐给无人先生,当你这样做的时候,

p = NULL;

既然没有人先生是自私的,他不会回报你给他的任何东西。只有当您的程序结束并且您的应用程序运行的进程退出时,他才会将其返回给您的操作系统。

于 2013-02-04T09:33:18.627 回答
2

您总是需要一个指针来保存内存位置,否则您无法取回它。

char *p=malloc(200);
char *p2 = p;
p = NULL;
free(p2);   
于 2013-02-04T09:39:55.467 回答
1

就目前而言,没有办法恢复记忆。您可以防止丢失它,但无法找回它。唯一的选择是退出程序。

于 2013-02-04T09:32:49.120 回答
0

这只有在您使用垃圾收集器时才有可能,例如Boehm-Demers-Weiser 收集器。如果不能使用垃圾收集器,则无法回收内存。

当然,如果你free(p)在设置之前调用,内存会被回收p = NULL,但你已经知道了。

exec()此外,如果您或进程退出,操作系统将自动回收内存。

于 2013-02-04T09:34:21.327 回答