首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

用delete释放堆内存引发的有关问题

2013-03-20 
用delete释放堆内存引发的问题本帖最后由 smallear1231 于 2013-03-16 00:02:53 编辑int *pnew int *p1

用delete释放堆内存引发的问题
本帖最后由 smallear1231 于 2013-03-16 00:02:53 编辑 int *p=new int;
 *p=1;
 cout<<*p<<endl;
delete p;
 cout<<*p<<endl;
*p=2;
 cout<<*p<<endl;
 delete p;
 指针p所指向的堆内存空间已经释放了,那*p=2是给指针指向的哪个空间传值?
[解决办法]
看下面的代码:

int *p1,
*p2;
p2 = p1 =new int(5);
delete p1;
if (p2==p1)//这里检测一下 p1被释放后的地址变化情况
{cout<<"p1==p2\n";}


初始化 p1的时候用 p2保存的p1初始化的地址,
但是当我们将 p1释放时 可以看出 p1的值 并没有 发生变化,依然指向原来开辟的堆空间(事实上这个空间已经被收回了),也就是说指针被释放后只是空间内存被释放,但是指针的值未被修改,所以释放堆后 营养给指针赋值NULL
[解决办法]
比如说,你租了房子,不住的时候把房子退了`~
但是你没有把要是还完`自己手里还留了钥匙`~
你虽然退了房`你照样可以进那个房子`只不过违法了`算擅入民宅`非法了`~
你一样可以在里面存放和取用东西`~
[解决办法]
delete 该指针后,只是回收该指针所指向的空间,该指针的值不变。你可以手动将其赋为null。你new的话 主要目的就是分配空间,而delete主要目的也正是回收空间。并不操作指针值,因此你delete p之后,再输出指针p的地址应该还是之前的地址,而值已经不再是你所赋的值。应该是一个无法预计的数,但是由于你还可以拥有该指针,因此你可以使用该指针给该空间赋值,这样可能会引起不必要的麻烦

热点排行