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)不是已经把指针删除了吗?
展开
 我来答
kaixingui2012
2014-09-11 · TA获得超过4.2万个赞
知道大有可为答主
回答量:1.4万
采纳率:81%
帮助的人:5865万
展开全部

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;
更多追问追答
追问
书上写的,delete一个空指针是安全的。
我的意思就想问怎么删除指针,或者指针不能被删除?
追答
问怎么删除指针,或者指针不能被删除?

我希望您在问这个问题时,对”指针“这个词有清楚的认识!

我可以先问一下,您这里说的”指针“是什么意思呢?
xoaxa
2014-09-11 · TA获得超过8601个赞
知道大有可为答主
回答量:6415
采纳率:72%
帮助的人:3284万
展开全部
(2)、delete p; // 释放了p指向的内存,大小由p的类型决定
(3)、p = 0; // p指向0(NULL)是安全的,是推荐用法
(4)、delete p; // 可能会出现问题,在VC ++ 6.0中,蜂鸣器会发声
(5)、p=new human; // 重新指向新的位置,没有问题。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友2c0046c
2014-09-11 · TA获得超过2211个赞
知道大有可为答主
回答量:2314
采纳率:50%
帮助的人:1074万
展开全部
delete不是删除指针,是释放指针申请的空间,delete后指针申请的空间没有了,但指针还存在。
更多追问追答
追问
那怎么删除指针?还是说指针不能被删除?
追答
就像定义int a,你后面会删除它么不会,定义指针也是一样,他们都存在于栈中,程序结束后释放
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
高楼寻缝
2014-09-11 · TA获得超过175个赞
知道小有建树答主
回答量:160
采纳率:0%
帮助的人:155万
展开全部
p是个指针,其指向“内容”。
delete p;意味着销毁掉p指向的内容,而不是p本身。
p是一个变量,当然可以改变p的值,即可以改变p的指向,使其指向新的“内容”。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
小du爱读书
2014-09-11 · 专注成长教育,从书中汲取,坚持分享
小du爱读书
采纳数:5 获赞数:3

向TA提问 私信TA
展开全部
delete实际意义不是删除指针,而是删除了指针指向的空间(分配的空间被释放了)
然后设定指针 p=0,相当于给指针置空(不指向其他地方)。
然后(5) 又给指针分配了空间,指针指向空间分配的地址。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(5)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式