我的核心文件声称已从
抛出SIGFPEGCC-4.3.4 /包括/ C ++ / 4.3.4 /比特/ 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));
}
这是我所拥有的另一个函数,它实际上是通过不执行任何浮点运算的代码调用高级函数。代码是使用优化编译的(但是有调试符号),所以事情可能会很混乱。
我的核心文件只是告诉我完全无稽之谈,还是有一种方法可以理解?
答案 0 :(得分:2)
在回答我自己的问题时,发生的事情是优化器采用了这样的代码:
int which = RANDOM % somecontainer.size();
std::advance(it, which);
并将它们组合在一起。这就是为什么看起来信号是从std :: advance内部引发的。根据Oli的评论,即使模数不是浮点运算,当模数相对于0时也可以发生SIGFPE。有一个不同的错误,允许somecontainer
在一个角落的情况下是空的。