c++ - 在新的 int[][] 上删除或删除[]

标签 c++ arrays c++11

我知道一般来说,如果您新建一个对象或主要数据类型的实例,您会使用delete;如果您分配一个数组,例如 new int[10],您可以通过 delete[] 释放内存。我刚遇到another source并发现在 C++11 中,您可以像这样新建一个多维数组:

auto arr = new int[10][10];

我的问题是:我应该使用 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;
}

这是为什么?

最佳答案

当分配的对象是数组(包括数组的数组,多维数组)时,总是delete[]。当您应该使用 delete[] 时使用 delete,或者 反之亦然, 是未定义的行为。它可能看起来有效,但不能保证。

关于c++ - 在新的 int[][] 上删除或删除[],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41991527/

相关文章:

c++ - 使用 GUIDFromString 要求包括 Shell32.dll : How do I do that

java - 如何在方法中返回数组?

C++ 基于输入参数的返回类型推导

c++ - 将包含 initializer_list 的参数包扩展到构造函数

c++ - 如何将 C++ 指针传递给 Fortran?

c++ - 使用 VB 进行人工智能

c++ - 初始化后在 C++ 上设置数组大小

c - 将 char 存储在数组 C 中无法正常工作

javascript - 如何使用javascript在嵌套对象数组中按属性赋值

c++ - 从原始内存位置 memcpy 到 vector<wchar_t>