-1

私のコードは以下のとおりです。プログラムを介して「loadFile」を実行しようとすると問題が発生します。ファイル名の入力を求められ、見つけられるファイル名を指定すると、「セグメンテーション違反」と表示され、実行が停止します。問題は、loadFileメソッド自体に起因するか、リンクリストに要素を追加するためのメソッドを記述している244行目にあると思います。どんな助けでも大歓迎です!ありがとう。

http://pastebin.com/7qZY9Hef

224行目:

 void countyElectionList::push_back(countyElectionResults * newCER){

    if(head == NULL)
head = newCER;
else
    {
    countyElectionResults * current = head;
    while(current->getNextResult() != NULL){
        current = current->getNextResult();
    }
current->setNextResult(newCER);
}

    }
4

2 に答える 2

2

リンクしたURLのソースコードによると(角かっこない、関数がreturnステートメントがないなど、さまざまな理由でコンパイルされません)、問題は次のとおりです。

// A constructor that initializes the private data members
countyElectionList::countyElectionList(){

}

NULLに初期化することは決してないので、の値countyElectionList::headを呼び出すと、おそらくNULLではなく、who-knows-what...を指すことになります。したがってクラッシュします。countyElectionList::push_backhead

今後の参考のために:クラッシュが発生した関数が疑わしくなく、ソースコードに障害が見つからない場合にクラッシュをデバッグするときは、ロジックを段階的に実行する必要があります。関数の呼び出し元を調べます。

更新:したがって、新しいペーストビンコードを調べた後(値を返すと主張するいくつかの関数にはreturnステートメントがないため、まだコンパイルされません)、エラーは同じ関数で引き続き発生します:

// A constructor that initializes the private data members
countyElectionList::countyElectionList(){
    countyElectionList::head == NULL;
}

代入演算子である。ではなく、比較演算子==であるwhichを使用していることに注意してください。使用する正しいコードは次のとおりです。=

// A constructor that initializes the private data members
countyElectionList::countyElectionList(){
    head = NULL;
}

あなたが実際にこのコードをコンパイルしようとしたのかどうか疑問に思う必要があります。私はそうしました、そして私のコンパイラはすぐに私にエラーを指摘しました。それは私に何をすべきかさえ教えてくれました:

test.cpp(210):警告C4553:'==':演算子は効果がありません。'='を意図しましたか?

また、あなたは頭を抱えているのではないかと思います。これは宿題であり、実際の選挙制度を行っていないことを前提としています(ただし...)。次の質問は、教授と話をして、言語の構文に問題があることを説明することを検討したかどうかです。 ?おそらくあなたの学校には役立つリソースがあります。ファイルにランダムに何かを挿入してプログラムしようとしても、学習には役立ちません。それは欲求不満の練習です。

于 2012-12-05T02:01:57.587 に答える
0

そもそも、のコンストラクタで初期化headすることはないようです。 NULLcountyElectionList

後で使用しようとすると、問題が発生する可能性がありheadますcountyElectionList::push_back

于 2012-12-05T01:56:28.240 に答える