经过一些更改后,我在巨大的应用程序中遇到了浮点异常。我尝试评论我的更改,发现当我启用一个简单的函数调用时会发生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()
调用它,但是问题解决了。感谢大家。
提前致谢。
答案 0 :(得分:1)
出于不同原因引发浮点异常(实际上是信号)。主要是:
如您所见,它们与浮点数无关!该名称是历史名称,如果不破坏大量源代码,则无法更改(SIGFPE
)中存在<signal.h>
常量。
GetMaxSize
可以在此处返回int
无法表示的值。