1

我的核心文件声称 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));
    }

这是在我拥有的另一个函数中,该函数确实通过不执行任何浮点运算的代码调用了提前包围。代码是用优化编译的(但有调试符号),所以事情可能会很混乱。

我的核心文件只是在告诉我完全是胡说八道,还是有什么办法可以理解?

4

1 回答 1

2

在回答我自己的问题时,发生的事情是优化器采用了如下所示的代码:

int which = RANDOM % somecontainer.size();
std::advance(it, which);

并将它们结合起来。这就是为什么信号似乎是从 std::advance 内部发出的。按照 Oli 的评论,当您取模相对于 0 时,可能会发生 SIGFPE,即使它不是浮点运算。有一个不同的错误允许somecontainer在角落里为空。

于 2010-11-17T19:17:52.377 回答