いくつかの変更の後、巨大なアプリケーションで浮動小数点例外が発生しました。変更をコメントしようとしたところ、1 つの単純な関数呼び出しを有効にすると FPE が発生することがわかりました。
api::getMaxSize();
これは単に値を返します。このように見えます
int api::getMaxSize() { return 536870912; };
これは静的メンバー関数です。これをヘッダーファイルに移動すると、すべて正常に動作します。私は混乱しています、何が原因でしょうか?API は別のモジュールにあり、動的ライブラリとしてリンクされているように見えますが、これがどのように問題を引き起こす可能性がありますか?
追加した
api.h
テンプレートであり、ヘッダーファイルに実装されている関数 maxBox() があります。この関数が呼び出すgetMaxSize()
template <typename T>
static rectangle<T> maxBox()
{
return rectangle<T>(
getMinSize(), getMinSize(),
getMaxSize(), getMaxSize()
);
}
ここに呼び出しコードがあります
if (!api::maxBox<double>().contains(box * scale)) { /* api::getMaxSize(); */ }
getMaxSize() 呼び出しを有効にすると、プログラムは FPE をスローし始めますが、実際には getMaxSize() は呼び出されません。
Found FPE inを追加box * scale
しました。呼び出しなしでなぜ機能していたのか理解できませんgetMaxSize()
が、問題は解決しました。みんなに感謝します。
前もって感謝します。