6

Floating point exception (core dumped)C++ プログラムでエラーが発生しました。gdb は、モジュロ除算を実行する行に問題があることを示しています。

Program received signal SIGFPE, Arithmetic exception.
[Switching to Thread 0x7ffff6804700 (LWP 13931)]
0x00000000004023e8 in CompExp::eval (this=0x7fffec000e40, currVal=0)
    at exp.cpp:55
55              return (r==0) ? 0 : l % r;

この行はゼロ除算を防いでおり、バックトレースは次のことを示しています。

#0  0x00000000004023e8 in CompExp::eval (this=0x7fffec000e40, currVal=0)
    at exp.cpp:55
        l = -2147483648
        r = -1

私はゼロで除算していないことを知っているので、他に何が例外を引き起こしている可能性がありますか?

4

3 に答える 3

8

だから私は問題の原因を突き止めました-算術例外は、ゼロで割るか、ここで起こったことである符号付き整数のオーバーフローのいずれかによって引き起こされる可能性があります。符号なし整数は、オーバーフロー時にラップ アラウンドする必要があります。符号付き整数の動作は未定義です。

于 2012-12-31T22:02:15.373 に答える
5

定義されていない負の数のモジュロをとろうとしないように、コードを次のように変更します。

return (r<=0) ? 0 : l % r;
于 2012-12-31T05:49:30.220 に答える