c++删除指针的问题

#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)不是已经把指针删除了吗?

慕婉清6462132
浏览 718回答 2
2回答

慕尼黑5688855

new &nbsp;delete不是字面意义上的新建和删除new表示申请内存delete表示释放内存(退还,归还给系统)这是一对组合命令123456(1)&nbsp;human&nbsp;*p=new&nbsp;human;&nbsp;&nbsp;声明一个指针变量p,并分配空间&nbsp;(2)delete&nbsp;p;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;释放p,释放后,p原来指向的内存空间不再为本程序所用,但变量p还是有效的,可以用,如(3)&nbsp;(3)p=0;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;给变量p赋值为0&nbsp;(4)delete&nbsp;p;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;这句有问题了,当p没有指向任何内存空间时,进行Delete操作有可能会出现系统异常&nbsp;(5)p=new&nbsp;human;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;这里再次申请一次内存空间,是允许的,p指向一个新的内存对象地址。&nbsp;return&nbsp;0;&nbsp;
打开App,查看更多内容
随时随地看视频慕课网APP