C++指针删除问题

#include"stdafx.h"#include<iostream>usingnamespacestd;intmain(array<System::String^>^... #include "stdafx.h"
#include<iostream>

using namespace std;

int main(array<System::String ^> ^args)
{
int number=1;
int *pNumber=&number;
cout<<*pNumber<<endl;
cout<<pNumber<<endl;
delete pNumber;
pNumber=&number;
cout<<*pNumber<<endl;
cout<<pNumber<<endl;
int temp;
cin>>temp;
return 0;
}
把pNumber地址删除后再次为pNumber附上number的地址。再打印出number的地址与number的值。为什么会陷入死循环?
展开
 我来答
金鱼8884
推荐于2017-09-26 · 知道合伙人数码行家
金鱼8884
知道合伙人数码行家
采纳数:124 获赞数:14949
学生

向TA提问 私信TA
展开全部
new delete不是字面意义上的新建和删除
new表示申请内存
delete表示释放内存(退还,归还给系统)
这是一对组合命令
(1) human *p=new human; 声明一个指针变量p,并分配空间
(2)delete p; 释放p,释放后,p原来指向的内存空间不再为本程序所用,但变量p还是有效的,可以用,如(3)
(3)p=0; 给变量p赋值为0
(4)delete p; 这句有问题了,当p没有指向任何内存空间时,进行Delete操作有可能会出现系统异常
(5)p=new human; 这里再次申请一次内存空间,是允许的,p指向一个新的内存对象地址。
return 0;
gecdg18
2010-11-28 · TA获得超过329个赞
知道小有建树答主
回答量:466
采纳率:0%
帮助的人:369万
展开全部
你申请了一段内存用来存储指针,然后这些指针又各自申请了一段内存。那你释放的时候当然要把每个指针指向的内存先释放,最后再释放存放指针的这段内存。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
wxmeng04
2010-11-28 · TA获得超过556个赞
知道小有建树答主
回答量:328
采纳率:0%
帮助的人:122万
展开全部
delete和new是成对出现的,他主要是删除那些动态分配的内存空间,如new、malloc和realloc函数分配的空间。你这个删除的不是动态的,那个地址是指向number,你调用了delete相当于把number变量的内存空间释放了,这个是不合法,在delete那一步已经出错了。你可以进入单步执行验证看看是哪一步出错的。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
一路的累CZ41c
推荐于2017-09-04 · TA获得超过126个赞
知道小有建树答主
回答量:218
采纳率:0%
帮助的人:149万
展开全部
我同意一楼的说法 不过我运行正常哦 可能是编译器的关系

另外附上网友关于delete的说明

delete之后,下次再重新申请的时候可以再申请这块内存地址,也就是将这块地址放到了空闲链表上,对于这块地址的内容,没有进行清空处理(也没有必要);由于你没有将p赋为NULL,所以p指针还是指向这块内存空间。

如果不delete的话,你这块内存是不能在申请使用的,也就是所谓的内存泄露。

对于delete之后的指针p,此时是“野指针”。
一般的正确做法是:
int * p = new int ;
if (p == NULL)(千万不要忘了这句话!!!)
{
//判断是否为空!使用空指针是不对的!!
}

delete p;
p = NULL;(千万不要忘了这一句话!!)
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友61b5e2f
2010-11-28 · TA获得超过291个赞
知道答主
回答量:64
采纳率:0%
帮助的人:0
展开全部
不会
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式