C++ 二维数组动态数组上的运行时错误

C++ 二维数组动态数组上的运行时错误,c++,arrays,dynamic,multidimensional-array,allocation,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; int**arr=newint*[5]; 对于(int i=0;i

我有以下代码:

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;
int**arr=newint*[5];
对于(int i=0;i<5;++i)
arr[i]=新整数[];
对于(int i=0;i<5;++i)
删除[]arr[i];
删除[]arr;
现在它编译并运行成功,但是如果我从第一行删除数组大小“5”,代码将编译,但在最后一行由于运行时错误而崩溃。我有以下问题,我没有找到答案在Straustrup的C++书籍,在互联网等< /P>
  • 为什么代码在指定的情况下崩溃?(我的猜测是delete[]无法找到要删除的数组大小并崩溃。)
  • 如果不允许分配多维数组而不指明大小,为什么编译器在编译时不会捕获这些错误

  • 使用
    [5]
    ,您将得到一个包含5个
    int*
    s的数组

    如果删除
    [5]
    ,则表示需要指向
    int
    的指针。因此本质上,您有了
    新的int*[1]


    然后用0到4的数字对其进行索引,这超出了范围。

    此线程应该会有所帮助。这甚至不能在GCC4.6.1.Seth上编译。您的意思是int*[]等同于int*[1]?如果是这样,那么代码应该在第二次迭代期间在第一个“for”循环中崩溃,但事实上它在最后一行崩溃。