c++删除指针的问题

#include<iostream>usingnamespacestd;classhuman{public:human(){cout<<"构造";}intcan(){x=... #include<iostream>
using namespace std;
class human
{
public:
human(){cout<<"构造";}
int can(){x=4; return x;}
private:
int x;
};
int main()
{
(1) human *p=new human;
(2)delete p;
(3)p=0;
(4)delete p;
(5)p=new human;
return 0;
}
第(2)释放了指针所指向的内存空间,第(4)将指针删除,为什么(5)还能使用这个指针,(4)不是已经把指针删除了吗?
展开
 我来答
阿衰到底撒5279
2014-09-11 · TA获得超过273个赞
知道答主
回答量:108
采纳率:0%
帮助的人:148万
展开全部
我同意一楼的说法 不过我运行正常哦 可能是编译器的关系

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

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

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

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

delete p;
p = NULL;(千万不要忘了这一句话!!)
希望能解决您的问题。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
_0x1F1E5E10
2014-09-11 · TA获得超过295个赞
知道小有建树答主
回答量:293
采纳率:50%
帮助的人:307万
展开全部
显然 2 已经 释放 了 p 指向的 内存 (new申请的内存被释放)
4就是重复释放 将导致 程序 奔溃

delete p 是释放p指向的内存 p本身并没有变化
要说变化也就只是 不能再通过p访问它指向的内存数据
(失去了访问指向数据的权限)

p=0是改变p的指向 使其指向NULL

打个 比喻
你去宾馆(操作系统)开个房间 (new 了一块内存)你得到一个房间的钥匙(new出来的内存的地址)

当你 退房 (delete p)但是 没有 退还钥匙(p的值没变),从法律上说你就内有那个房间的使用全了,

但要是 你归还了钥匙 (p=NULL),那你就 真 进不了 你退掉的那个房间
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式