-2

下面的代码会发生什么?

    int *p1 = new int[100];
    int *p2 = &p1[50];
    delete [] p2;

我听说新的一些实现将数组的大小存储在第(-1)个数组索引中,但是上面的事情不会出现可怕的错误吗?

4

1 回答 1

1

事情肯定会出错!

delete []运算符被定义为仅适用于正确的数组指针。正确地说,我的意思是它必须接收一个先前初始化的指针,以指向内存中使用new运算符创建数组的位置。

你也不应该混合和匹配 new/delete 和 malloc/free。作为一项规则,始终删除已分配的内存new,并释放已分配的内存malloc(和派生类)

于 2013-03-01T02:29:35.903 回答