删除2d数组时出错

时间:2014-09-07 02:55:20

标签: c++

我不擅长英语(我是越南人,所以我的问题可能会有一些语法错误。)

今天,我正在进行编码练习,当我删除二维数组时发现错误。之后,我编写了一个简单的代码进行测试,它有相同的错误!这是我的测试代码:

#include "stdafx.h"

int main()
{

     int **test;
     int i;
     test= new*[3];
     for(i=0;i<3;i++)
     {
             test[i]=new int[1];
             test[0][i]=0;
     }

     for(i=0;i<3;i++)
             delete[] test[i];
     delete[] test;

     return 0;
}

- 当我调试我的代码时,我检测到错误发生在第34行;删除[] test [i];&#34;。出现一个窗口,并告诉我:

  • Windows已在test.exe中触发了断点
  • 这可能是由于堆损坏,这表示test.exe或其加载的任何DLL中存在错误。
  • 这也可能是由于用户在test.exe具有焦点时按下F12。
  • 输出窗口可能包含更多诊断信息。

- 并在输出窗口中:

&#34; HEAP [test.exe] X处的堆块修改为Y,请求大小超过28&#34;

注意:

  • 如果我不使用删除,则不会发生错误。
  • 仅当i = 0时才会发生错误。
  • 如果我分配一个只有1个元素的2d数组,则不会发生错误(delete [] test [0]; //运行normaly)

知道问题究竟是什么? 谢谢。

1 个答案:

答案 0 :(得分:0)

test[0][i]=0;错误地指出了这些指数 - 应该test[i][0]=0;与之前的行test[i]保持一致。

你所有的其他推理都没问题。