#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)不是已经把指针删除了吗?
2 回答
慕尼黑5688855
TA贡献1848条经验 获得超2个赞
new delete不是字面意义上的新建和删除
new表示申请内存
delete表示释放内存(退还,归还给系统)
这是一对组合命令
1 2 3 4 5 6 | (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; |
- 2 回答
- 0 关注
- 717 浏览
添加回答
举报
0/150
提交
取消