一个关于new与delete的简单有关问题。分配内存后,然后再delete,为啥前后指针p的地址没有发生变化?

一个关于new与delete的简单问题。分配内存后,然后再delete,为啥前后指针p的地址没有发生变化??
#include<iostream>
using namespace std;

int main()
{

int *p;
p=new int;
cout<<"";
delete p;  //调试发现p被delete前后的地址值没变,怎么会不变??不是应该变化吗??郁闷
cout<<"";
return 0;
}

------解决方案--------------------
一定程度上依赖于compiler,可能delete不一定马上破坏该空间,可能只是做了标志,表明该地址被系统回收,但delete不会改变p的值。如果仍继续使用p,后面的操作将导致undefined behavior。

这表明了C++中指针的危险性。
------解决方案--------------------
new 和 delete 处理的是内存分配相关的事情 
不是指针指向的问题 想改变指针 请用 = 
------解决方案--------------------
delete后应该只是释放了p所指向的内存单元,这样其它程序就可以使用这个单元了
 但是p的值如果没有手动去改的话就不会改变
只是个人理解....
------解决方案--------------------
引用:
C/C++ code?12345678910111213#include<iostream>using namespace std; int main(){         int *p;    p=new int;    cout<<"";    delete p;  //调试发现p被delete前后的地址值没变,怎么会不变??不是应该变化吗??郁闷    cout<<……


楼主,首先告诉你一件事,你理解的有错误,不知道你知不知道野指针
如下代码:
#include<iostream>
using namespace std;

int main()
{

int *p=new int(1);
cout<<"delete之前的p内容:"<<*p<<endl;
free(p);  //调试发现p被delete前后的地址值没变,怎么会不变??不是应该变化吗??郁闷
cout<<"delete之后的p内容"<<*p<<endl;
system("pause");
return 0;
}


代码结果如下:
delete之前的p内容:1
delete之后的p内容:1128040
delete所做的工作只是把p指向的地址(1128040)中的内容清空,别人可以用这块地址
而这个p本身没有变化,如果再用p那么p就是野指针了
所以安全的做法是
delete p;
p=NULL;
你的意思是delete之后p也灰飞烟灭了是吧,那p=NULL这句话就报错了。

还有一个主意点就是你知道delete和free的区别吗
delete比free除了调用析构函数外,还多了个判断
就是
if(p!=NULL)
free(p);

即使你在程序中使用malloc,free替换new,delete
p的值也不会发生改变,但是*p已经被清空了,这块空间可以被其他人使用。
懂了吗?