2

私はこのコードに取り組んでいます:

struct box
{
    char word[200][200];
    char meaning[200][200];
    int count;
};

struct root {
    box *alphabets[26];
};
root *stem;
box *access;
void init(){
     //cout<<"start";
    for(int i = 0 ; i<= 25; i++){
        struct box *temp =(struct box*)( malloc(sizeof(struct box)*100));
        temp->count = 0;
        cout<<temp->count;
        stem->alphabets[i] = temp;
    }
    //cout<<" initialized";
}

tempエラーなしでコンパイルされましたが、実行中にが割り当てられた場所で停止しstem->alphabets[i]ます。これを修正する方法は?

4

4 に答える 4

6

ポインターstemstructはなく を作成します。

root stem; // No asterisk

それ以外の場合、メモリが割り当てられていないため、逆参照は未定義の動作です。

もちろん、に置き換える必要がありstem->alphabets[i]ますstem.alphabets[i]

于 2013-09-14T13:23:28.030 に答える
4

stem変数にメモリを割り当てる必要があります

root * stem = new root();

割り当てを解除することを忘れないでください:

delete stem;

さらに良いことに、C++ でのメモリ割り当てについて何か読んでください。

于 2013-09-14T13:24:11.357 に答える
3

stemtempは 2 つの異なる変数です。:) にメモリを与えてtempアクセスしてstemいます。

于 2013-09-14T13:23:06.170 に答える
0

最初に初期化せずにポインターを使用しています。簡単な答えは、そもそもポインターを使用しないことです。あなたが投稿したコードにポインターの理由がわかりません。

struct box
{
    char word[200][200];
    char meaning[200][200];
    int count;
};

struct root {
    box alphabets[26];
};
root stem;

はるかに簡単です。

于 2013-09-14T13:38:03.690 に答える