我一般都知道,如果您new
是对象或主要数据类型的实例,则使用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;
}
为什么?
答案 0 :(得分:5)
当分配的对象是一个数组(包括一个数组数组,,即一个多维数组)时,总是delete[]
。当您应该使用delete
时使用delete[]
,或者反之,是未定义的行为。它似乎可行,但无法保证。
答案 1 :(得分:1)
你可以在C ++ 11之前使用新的数组。
auto p = new int[rand()][300][300];
C ++ 11只提供'自动'糖。
这不是三维动态数组,它只是第一个方向的动态,即二维数组的dymamic数组。
你可以说
auto p = new int[300][rand()][300];
但你不能说
QProcess process;
QString program = "cmd.exe";
QStringList arguments = QStringList() << "/K" << "python.exe";
process.startDetached(program, arguments);
因为这是普通的动态数组,所以使用普通的delete []