![](https://iknow-base.cdn.bcebos.com/lxb/notice.png)
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)不是已经把指针删除了吗? 展开
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)不是已经把指针删除了吗? 展开
7个回答
展开全部
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一个空指针是安全的。
我的意思就想问怎么删除指针,或者指针不能被删除?
追答
问怎么删除指针,或者指针不能被删除?
我希望您在问这个问题时,对”指针“这个词有清楚的认识!
我可以先问一下,您这里说的”指针“是什么意思呢?
展开全部
(2)、delete p; // 释放了p指向的内存,大小由p的类型决定
(3)、p = 0; // p指向0(NULL)是安全的,是推荐用法
(4)、delete p; // 可能会出现问题,在VC ++ 6.0中,蜂鸣器会发声
(5)、p=new human; // 重新指向新的位置,没有问题。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
delete不是删除指针,是释放指针申请的空间,delete后指针申请的空间没有了,但指针还存在。
更多追问追答
追问
那怎么删除指针?还是说指针不能被删除?
追答
就像定义int a,你后面会删除它么不会,定义指针也是一样,他们都存在于栈中,程序结束后释放
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
p是个指针,其指向“内容”。
delete p;意味着销毁掉p指向的内容,而不是p本身。
p是一个变量,当然可以改变p的值,即可以改变p的指向,使其指向新的“内容”。
delete p;意味着销毁掉p指向的内容,而不是p本身。
p是一个变量,当然可以改变p的值,即可以改变p的指向,使其指向新的“内容”。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
delete实际意义不是删除指针,而是删除了指针指向的空间(分配的空间被释放了)
然后设定指针 p=0,相当于给指针置空(不指向其他地方)。
然后(5) 又给指针分配了空间,指针指向空间分配的地址。
然后设定指针 p=0,相当于给指针置空(不指向其他地方)。
然后(5) 又给指针分配了空间,指针指向空间分配的地址。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询