2 qq 31601743 qq_31601743 于 2016.04.22 13:04 提问

C++ delete,输出问题

#include
using namespace std;

int main()
{

 char *p =new char [10];
 strcpy(p,"hello");      
 delete []p; 
 cout << (void*)(p)<<endl;
 strcpy(p,"hello");
 cout << (void*)(p)<<endl;

}
为什么输出只输出一次?

5个回答

caozhy
caozhy   Ds   Rxr 2016.04.22 14:12

释放了内存,输入指针变量还是有值的,但是访问指针变量,则可能会丢出异常。

chenqixia
chenqixia   2016.04.22 14:20

指针delete以后就是野指针了,你后面的输出和赋值输出都是错误的操作,应该是输出使用完了以后再Delete掉

big_thinker
big_thinker   2016.04.22 16:53

我在centos6.5下面用GDB测试了一下,当执行了delete [] p以后,p地址的内容被置空了,所以第一次不会打印出来hello
第二次能打印出来是因为p指向的内存虽然被系统收回了,但是该值并未消失,依然指向被分配的地址空间,用strcpy往里面写了hello,所以能打印出来

另外,如果delete后,应该将该值置NULL,以免再以后的过程中污染其他数据引起崩溃
注:gdb环境下,可以用x/10cb p将p地址空间的10个单字节内容打印出来

CSDNXIAOD
CSDNXIAOD   2016.04.22 13:12

C++中delete问题
C++中delete问题
C++ delete的问题
----------------------biu~biu~biu~~~在下问答机器人小D,这是我依靠自己的聪明才智给出的答案,如果不正确,你来咬我啊!

qq_31601743
qq_31601743   2016.04.22 13:08

把delete放在第一个cout后面可以输出两次

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!