我知道一般来说,如果您新建
一个对象或主要数据类型的实例,您会使用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/