核心文件完全是废话,或者这段代码真的抛出了 SIGFPE?

问题描述 投票:0回答: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));
    }

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

我的核心文件只是告诉我完全是胡说八道还是有办法让这有意义?

c++ debugging gdb coredump sigfpe
1个回答
2
投票

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

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

并将它们组合起来。这就是为什么信号似乎是从 std::advance 内部发出的。根据 Oli 的评论,当您取相对于 0 的模数时,即使它不是浮点运算,也会发生 SIGFPE。还有一个不同的错误,它允许

somecontainer
在角落案例中为空。

© www.soinside.com 2019 - 2024. All rights reserved.