2 u014776141 u014776141 于 2014.11.29 23:29 提问

指针删除操作 指针赋值 错误

#include "stdafx.h"
#include
using namespace std;

int _tmain(int argc, _TCHAR* argv[])
{
int *p,*q;
p = new int[10];
p[0] = 2;
p[1] = 1;

cout << "********"<< endl;
q = p+1;
cout << *q <<endl;
delete []q;  //为何删除时出现bug,if:q=p,things will be all right?
return 0;

}

2个回答

u010925162
u010925162   2014.11.30 00:37

delete 指针实际上释放了指针所指的堆内存,但指针本身是一个32位(在32位机器上)的无符号整数。其值是对象的首地址,这个值并没变。也就是说,你用delete后,不但指针任然存在,而且其内容都没有变换。他本身的释放在超过他生命周期的时候销毁。然而现在指针所指的内存已经不可用了,再次操作其内容将会发生内存错误(比如再次delete)。所以,安全的做法是让指针值等于NULL
cout << "********"<< endl;
q = p+1;
cout << *q <<endl;
q = NULL;
delet []q;
return 0;

u014776141
u014776141 你这样不就没有释放开辟的那块内存吗?
接近 3 年之前 回复
eagleyan
eagleyan   Rxr 2014.11.30 05:42

new和delete是成对的。当p=q是,delete q相当于delete p;这个和new p就成对了

Csdn user default icon
上传中...
上传图片
插入图片