编写动态2D阵列时访问冲突...有时

时间:2010-04-12 01:57:04

标签: c++ access-violation dynamic-arrays

此程序用于生成动态数组,但在给定某些维度时写入时会出现访问冲突错误。例如:R = 6,C = 5崩溃,但随后R = 5,C = 6则没有。如果你想知道,这不是我的“修复”这个破碎程序的功课,这就是我们在课堂上教授的方法。我评估的另一部分是使用这种方法,因此载体就出来了。提前谢谢!

#include <iostream>

using namespace std;

int main(){

const int R = 6;
const int C = 5;

char **d;

d = new char *[R];

for(int i=0; i<C; ++i){
    d[i] = new char[C];
}

//initialise
for(int i=0; i<R; ++i){
    for(int j=0; j<C; ++j){
        d[i][j] = 'd';
        cout<<d[i][j];
    }
    cout<<endl;
}
cout<<endl;

system("pause");
return 0;
}

2 个答案:

答案 0 :(得分:4)

for(int i=0; i<C; ++i){
    d[i] = new char[C];
}

应该是

for(int i=0; i<R; ++i){
    d[i] = new char[C];
}

答案 1 :(得分:3)

您的第一个循环为chard之间的0数组元素创建了一个新的C-1数组。

第二个外环包括0R-1。因此,最后访问的d[i]未初始化。这通常会失败。

要解决此问题,请将其用作第一个循环

for(int i=0; i<R; ++i){
    d[i] = new char[C];
}