在下面的代码段中,我得到非常令人沮丧的错误。多数民众赞成在我的数组。

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/

10-11 02:18