0

学校で簡単な宿題をコーディングしようとすると、次のようにC ++でリンクリストを実装するエラーセグメンテーション違反(コアダンプ)が発生します。

struct Word{
    string word;
    string meaning;
    Word * next;
};

struct dictionary{
    Word *head = NULL;
    int count;
}dict;

string addWord(string word, string meaning){
    Word *newWord = new Word;
    newWord -> word = word;
    newWord -> meaning = meaning;
    newWord -> next = dict.head;
    dict.head = newWord;
    dict.count++; 
}

エラーが発生したときに単語(ノード)を追加しようとしています。教師の要件であるため、c++クラスを使用できません。ご協力いただきありがとうございます。

4

1 に答える 1

3

dict.count初期化されることはありません。コンパイラがデフォルトの初期化をstruct定義に含めることができることを考えると、それが定義されている場所に書き込む必要がありますint count = 0;。これはおそらくセグメンテーション違反を引き起こしていませんが、それでも修正する必要があります。

addWord返すstringことができないと、それが戻り値として含まれているにもかかわらず、セグメンテーション違反が発生している可能性があります。これにより、未定義の動作が発生します(クラッシュする可能性があります)。その塩に値するコンパイラは、あなたが書いたコードを書くことに対してあなたに致命的な警告を与えるでしょう。の戻りタイプをaddWordに変更しvoidます。このような:

void addWord(string word, string meaning)

このウェブサイトへの問題の投稿に関する一般的なアドバイス:

問題を投稿するときは、メソッドを含め、コードをコンパイルして実行するために必要なすべてのものを含めてくださいmain。重要でないと思われるものはすべてコードから削除しますが、残したものは引き続き実行され、問題を示す必要があります。

不完全なコードを表示するとき、あなたはばかです。何が重要かを知っていれば、助けを求める必要はありませんね。したがって、完全なコードを投稿する必要があります。

表示するコードが多すぎると、失礼になります。まず、コードを問題を示す最小限の例に絞り込みますが、実際の問題がどこにあるかを確認できるように、完全なままにしておきます。

于 2012-11-25T05:48:16.760 に答える