0

次の C++ コードでは、ゼロによる ain 整数除算が発生することはありません。

// gradedUnits and totalGrades are both of type int
if (gradedUnits == 0) {
    return 0;
} else {
    return totalGrades/gradedUnits; //call stack points to this line
}

ただし、Visual Studio で次のエラーが表示されます。

DSA_asgn1.exe の 0x001712c0 で未処理の例外: 0xC0000094: ゼロによる整数除算。

また、スタック トレースは、コードに示されている行を指しています。

更新: ここでばかげたことをしていたのかもしれません。VSにデバッグブレークポイントに注意を向けさせようとしている間に、ソリューションを再構築しましたが、例外はもう発生していません。新しいセッションを開始していると思ったときに、デバッグ セッションの途中で停止して再開していた可能性が高いようです。

回答ありがとうございます。私の質問は解決済みであり、実際には私が思っていたものではなかったので、ここで質問を削除することは適切でしょうか?

VSは、ゼロ除算が可能かどうかをチェックせずに、整数除算でこれを行うだけのようです。コードが例外をスローできない場合でも、この例外をキャッチする必要がありますか? もしそうなら、これについて最善の方法は何ですか?

これは、C++ で VS 2005/2008 を指定する割り当て用です。必要以上に物事を複雑にしたくないのですが、同時に、可能な限り適切に物事を行いたいと思っています。

4

2 に答える 2

1

このコードを VS デバッガーで実行してみて、これらの変数の実際の値を確認してください。

于 2010-03-27T07:38:36.613 に答える
-1

この問題は、私が最初に持っていたゼロ除算チェックのないコードが原因であることが判明しました。

return totalGrades/gradedUnits;

問題は、コードを更新したにもかかわらず、実際には元のエラーをスローしたのと同じデバッグ セッションに残っていたため、プログラムは古いコードで実行されたままで、再起動するたびにエラーがスローされたことでした。

この問題は、ソリューションを再構築することで解決され、新しいデバッグ セッションが強制されました。単純にデバッグ セッションを終了し、再構築で再起動するだけでも問題は解決します (まだセッションに参加していることに気付いていませんでした)。

于 2010-03-31T14:10:21.883 に答える