如果给定一个指向数组中间的指针,delete[]会做什么?

What does delete[] do if given a pointer to the middle of an array?

本文关键字:delete 指针 什么 中间 数组 一个 如果      更新时间:2023-10-16

下面的代码会发生什么?

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

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

事情肯定会出错!

delete []操作符被定义为只作用于正确的数组指针。这里的"适当"指的是,它必须接收一个指针,该指针必须先前被初始化,指向内存中使用new操作符创建数组的位置。

你也不应该混用new/delete和malloc/free。通常,删除已分配给new内存,并且释放已分配给malloc(及其派生)的内存