在新的int [] []上删除或删除[]

Tim*_*ing 2 c++ arrays c++11

我一般都知道你new是一个对象的实例还是一个主数据类型,你使用delete; 如果你分配一个数组new int[10],你可以释放内存delete[].我刚刚遇到另一个来源并发现在C++ 11中,您可以像这样创建一个多维数组:

auto arr = new int[10][10];
Run Code Online (Sandbox Code Playgroud)

我的问题是:我应该使用delete还是应该使用delete[]?我会说delete[]看起来对我更正确,但是,delete不会崩溃以下程序:

#include <stdio.h>

int main() {
    for (int i = 0; i < 100000; i++) {
        cout << i << endl;
        auto ptr = new int[300][300][300];
        ptr[299][299][299] = i;
        delete ptr;  // both delete and delete[] work fine here
    }
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

这是为什么?

Bri*_*ian 5

始终delete[]在分配的对象是一个数组(包括一个数组数组,一个多维数组).使用delete时应该使用delete[],反之亦然,是未定义的行为.它可能似乎有效,但不能保证.