书上的题,求输出结果,可是编译器显示有错误

#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函数会自动的释放这一段连续的内存空间。