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 に答える