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币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
delete null指针会发生什么
把指针赋值为null了,那么该指针就什么也不指向了。但是,你还可以对该指针重新赋值,让它可以重新指向。 如果赋值为null,并且用delete进行销毁了,那么该指针就不能再重新进行指向了。如果需要,你得另外定义一个指针了。
cJSON_Delete调用时segmentfault
cJSON_Delete cJSON_Delete释放cJSON构造object时申请的内存资源 通常用法 cJSON *json = cJSON_CreateObject(); ... ... cJSON_Delete(json); 调用cJSON_Delete时产生segmentfault 错误段代码: cJSON *json = cJSON_
C ++ delete 和delete[]
【原文引用如下】: C++告诉我们在回收用 new 分配的单个对象的内存空间的时候用 delete,回收用 new[] 分配的一组对象的内存空间的时候用 delete[]。  关于 new[] 和 delete[],其中又分为两种情况:(1) 为基本数据类型分配和回收空间;(2) 为自定义类型分配和回收空间。  对于 (1),上面提供的程序a可以证明了 delete[] 和 de
C语言中delete与delete []的不同
下面的语句有什么错? string *stringarray = new string[100]; ... delete stringarray;       一切好象都井然有序——一个new对应着一个delete——然而却隐藏着很大的错误:程序的运行情况将是不可预测的。至少,stringarray指向的100个string对象中的99个不会被正确地摧毁,因为他们的析构函数永远不会被调用。
char*、new和delete联合使用的问题
一个测试例子如下: char *strc = new char[5]; strc[0] = '\0'; strcat(strc,"12345"); delete[] strc; 看似没问题,字符串strc分配空间正确并且将"12345”连接赋值给它。但是问题出现在这里:delete[] strc; 为什么呢?因为strc用new分配空间时在堆中有5个连续的字节,在将"1
浅谈 C++ 中的 new/delete 和 new[]/delete[]
在 C++ 中,你也许经常使用 new 和 delete 来动态申请和释放内存,但你可曾想过以下问题呢? new 和 delete 是函数吗?new [] 和 delete [] 又是什么?什么时候用它们?你知道 operator new 和 operator delete 吗?为什么 new [] 出来的数组有时可以用 delete 释放有时又不行?… 如果你对这些问题都有疑问的话,
C语言 malloc/free和C++中new/delete的区别
1. malloc()函数 1.1 malloc的全称是memory allocation,中文叫动态内存分配。 原型:extern void *malloc(unsigned int num_bytes);  说明:分配长度为num_bytes字节的内存块。如果分配成功则返回指向被分配内存的指针,分配失败返回空指针NULL。当内存不再使用时,应使用free()函数将内存块释放。 1.
C ++的new、delete
当写出p = new P();这样的代码的时候, 实际上有两步操作, 首先分配内存,然后在分配好的内存之上初始化类成员. 第二步是有构造函数完成的, 第一步就是new函数的工作. 全局的new有六种重载形式, void *operator new(std::size_t count)      throw(std::bad_alloc);              //一般的版
C/C++ 使用delete删除指针需小心 “野指针”
本文转载自: 众所周知,最开始我们用new来创建一个指针,那么等我们用完它之后,一定要用delete将该指针删掉。但是,值得注意的是,难道就仅仅是删除这个指针这么简单的么?下面,我们用一个程序来说明这个问题:   #include 02 using namespace std;
Xcode9.3编译的程序崩溃在不正确的delete调用
最近在做一个iOS应用,我们C++开发组发布了一个图形库,之前用Xcode9.2发布过,一切正常。之后Xcode升级到了9.3,修改了一些bug后,又重新发布了一版,结果一运行就闪退。看到这个结果立马心里一惊,心想也没改什么东西,只改了一些无关痛痒的地方,而且在其他的平台都发布过也没有什么问题啊,我觉得应该是Xcode升级所致,但升都升了,想降也不容易,只好硬着头皮调试,发现程序总是在一处析构函数...