2D阵列动态数组上的运行时错误

时间:2011-09-05 18:34:55

标签: c++ arrays dynamic multidimensional-array allocation

我有以下代码:

int **arr = new int*[5];

for(int i = 0; i < 5; ++i)
    arr[i] = new int[];

for(int i = 0; i < 5; ++i)
    delete [] arr[i];

delete [] arr;

现在它编译并成功运行,但是如果我从第一行删除数组大小'5',则代码编译但在最后一行崩溃并出现运行时错误。我有以下问题,我没有在Straustrup的C ++书籍,互联网等中找到答案。

  1. 为什么代码在指定的情况下崩溃? (我的猜测是delete []无法找到要删除和崩溃的数组大小。)
  2. 如果不允许分配多维数组而没有指出编译时编译器没有捕获到这些错误的大小?

1 个答案:

答案 0 :(得分:3)

使用[5],您将得到5个int*的数组。

如果删除[5],则表示您需要指向int指针的指针。基本上,你有new int*[1]

然后你用0到4之间的数字索引它,这是超出界限的。