我的核心文件声称 SIGFPE 是从
抛出的gcc-4.3.4/include/c++/4.3.4/bits/stl_iterator_base_funcs.h
第 176 行。这是这里:
template<typename _InputIterator, typename _Distance>
inline void
advance(_InputIterator& __i, _Distance __n)
{
// concept requirements -- taken care of in __advance
176----> typename iterator_traits<_InputIterator>::difference_type __d = __n;
std::__advance(__i, __d, std::__iterator_category(__i));
}
这是在我拥有的另一个函数中,该函数确实通过不执行任何浮点算术的代码调用提前。代码是经过优化编译的(但有调试符号),所以事情可能会很混乱。
我的核心文件只是告诉我完全是胡说八道还是有办法让这有意义?
在回答我自己的问题时,发生的事情是优化器采用了如下所示的代码:
int which = RANDOM % somecontainer.size();
std::advance(it, which);
并将它们组合起来。这就是为什么信号似乎是从 std::advance 内部发出的。根据 Oli 的评论,当您取相对于 0 的模数时,即使它不是浮点运算,也会发生 SIGFPE。还有一个不同的错误,它允许
somecontainer
在角落案例中为空。