0

该程序旨在生成一个动态数组,但是在给定特定维度时写入时会出现访问冲突错误。例如: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;
}
4

2 回答 2

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];
}
于 2010-04-12T02:03:23.370 回答
3

您的第一个循环为char数组的元素创建了一个新数组,d包含0在内C-1

第二个外循环从包含0R-1包含。所以最后d[i]访问的没有初始化。这通常会失败。

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

for(int i=0; i<R; ++i){
    d[i] = new char[C];
}
于 2010-04-12T02:02:55.480 回答