经过一些更改,我在大型应用程序中有一个浮点异常。我试图评论我的更改,发现启用一个简单的函数调用时会发生FPE。
api::getMaxSize();
它只是返回值。
看起来像这样
int api::getMaxSize() { return 536870912; };
这是静态成员函数。当我将其移至头文件时,一切正常。
我很困惑,那会是什么?看起来API处于另一个模块中并链接为动态库,但是这怎么会引起问题呢?
添加了
函数maxBox()是模板,并在
api.h
头文件中实现。该函数调用
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()。
添加了
在
box * scale
中找到了FPE,无法理解为什么没有getMaxSize()
调用它仍能正常工作,但是问题得以解决。感谢大家。提前致谢。
最佳答案
浮点异常(实际上是信号)由于不同的原因而产生。主要的是:
如您所见,它们与浮点数无关!该名称是历史名称,在不破坏大量源代码的情况下就无法更改(
SIGFPE
中存在<signal.h>
常量)。此处
GetMaxSize
返回的值不能由int
表示。