读书人

这个指针内存储器需要释放吗

发布时间: 2013-08-01 15:23:18 作者: rapoo

这个指针内存需要释放吗?
p2需要释放吗?

#include "stdafx.h"
#include <stdio.h>
#include "stdlib.h"


int main(void)
{
int *p1, *p2;
p1 = (int *)malloc(sizeof(int));
p2 = p1;

//中间代码就不写了。
free(p1);
free(p2);//这里需要释放吗?
return 0;
}

[解决办法]
不需要,而且也不可以
[解决办法]
当然不需要,p1 p2指向同一块内存,只需释放一次,再释放会出错。
不过你也许需要把p1 p2指向的内存释放后,p1 p2赋为空指针,习惯上好点。
不过你这里后面没东西了,就没必要。。
[解决办法]
只有动态申请的,才可以free。
p2不是动态申请的,
free会出错的。
[解决办法]
我曾经看过一个计算中心的文档说明,说:不要让多个指针指向一块内存!指向同一块内存指针越多,那么悬空指针错误几率越大!而且不能并行执行!

当然,简单小程序用用无妨!注意指向的改变,以及避免多次释放!

回答你的问题:不需要释放p2!但是如果下文还有代码,安全考虑,再释放空间后,加上安全机制:p2=p1=NULL;
[解决办法]
free(p1)或是free(p2),使用两者中的任何一个均可,记住:一夫一妻制,一次malloc对应一次free,不能多也不能少。

读书人网 >C语言

热点推荐