在下面的代码段中,我得到非常令人沮丧的错误。多数民众赞成在我的数组。
int **tab2 = new int*[3];
我像这样分配。
for(i = 0; i < 10; i++) {
tab2[i] = new int[3];
tab2[i][0] = 40;
tab2[i][1] = 10;
tab2[i][2] = 100;
}
然后,在使用它之后,我想销毁它。
for(i = 0; i < 10; i++) {
delete [] tab2[i];
}
delete [] tab2;
这会导致核心转储每一次。我尝试了许多不同的方法来销毁它,每次都收到此错误。我在这里弄错了什么?
最佳答案
这个
int **tab2 = new int*[3];
不按照您的想法去做。
您需要一个包含十个(10)指针的数组,每个指针指向三个整数的数组。
new int*[3]
是包含三个指针的数组。What you want is this (live at coliru):
#include <iostream>
int main() {
int **tab2 = new int*[10];
for(int i = 0; i < 10; i++) {
tab2[i] = new int[3];
tab2[i][0] = 40;
tab2[i][1] = 10;
tab2[i][2] = 100;
}
for(int i = 0; i < 10; i++) {
delete [] tab2[i];
}
delete [] tab2;
}
关于c++ - C++取消分配2D int数组错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23683286/