问题描述
- 指针删除操作 指针赋值 错误
-
#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;
}
解决方案
delete 指针实际上释放了指针所指的堆内存,但指针本身是一个32位(在32位机器上)的无符号整数。其值是对象的首地址,这个值并没变。也就是说,你用delete后,不但指针任然存在,而且其内容都没有变换。他本身的释放在超过他生命周期的时候销毁。然而现在指针所指的内存已经不可用了,再次操作其内容将会发生内存错误(比如再次delete)。所以,安全的做法是让指针值等于NULL
cout << "********"<< endl;
q = p+1;
cout << *q <<endl;
q = NULL;
delet []q;
return 0;
解决方案二:
new和delete是成对的。当p=q是,delete q相当于delete p;这个和new p就成对了
时间: 2024-12-29 09:55:39