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作成します。d0C-1

2 番目の外側のループは、包括的にから0へと進みます。R-1そのため、最後d[i]にアクセスしたものは初期化されません。これは通常失敗します。

問題を解決するには、それを最初のループとして使用します

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