如果我“丢失”最后剩余的指针,我可以访问动态分配的内存吗?

时间:2013-02-04 09:31:02

标签: c memory-leaks malloc

代码如下:

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

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

5 个答案:

答案 0 :(得分:3)

致电p=NULL;之前 使用free(p);

但在释放内存之前,将指针指定为NULL,它将丢失......

答案 1 :(得分:2)

当你这样做时,不,你不能把它捐赠给No-one先生,

p = NULL;

由于No-one先生是自私的,他不会给你任何给予他的东西。当程序结束并退出应用程序的过程时,他只会将其返回给您的操作系统。

答案 2 :(得分:2)

你总是需要一个指针来保持记忆位置,否则你无法取回它。

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

答案 3 :(得分:1)

目前看来,没有办法让记忆恢复。你可以防止失去它,但不能让它失败。唯一的选择是退出程序。

答案 4 :(得分:0)

仅当您使用垃圾收集器时才可以这样做,例如Boehm-Demers-Weiser collector。如果您不能使用垃圾收集器,则无法回收内存。

当然,如果您在设置free(p)之前致电p = NULL,则回收内存,但您已经知道了。

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