#include void main(){ int *p=new int[3]; for (int i=0;i<3;i++) p[i]=i; delete [1]p; p[1]++; cout<<"p[0]="<<p[0]<<",p[1]"<<p[1]<<"\n";}
delete [1]p;
不能这么释放。因为p是一个整体
http://codepad.org/z7KdcK4k
在线验证
delete [1]p已经把指针释放掉了,后面p[1]++又对已释放掉的指针进行调用,当然会报错
#include<iostream>
using namespace std;
void main()
{
int * p = new int[3];
for (int i = 0; i < 3; i++)
{
p[i] = i;
}
//delete[1] p; 此时已经把p[1]这个堆内存给释放了,下一步再对p[1]做操作,肯定会出错,另外这样释放内存的方式也是错误的,
p[1]++;
cout << "p[0]=" << p[0] << " p[1]=" << p[1] << "\n";
delete[] p; //正确释放堆内存的地方,
system("pause");
}
释放整个动态数组的空间用delete[] p
p是一个整体,不能单独释放。你再看看书,是不是写错了。
释放new出来的数组的时候是用delete []p;然后delete函数会自动的释放这一段连续的内存空间。