Core File Complete Nonsenseまたはこのコードは本当にSIGFPEを投げたのでしょうか?

StackOverflow https://stackoverflow.com/questions/4198770

質問

私のコアファイルは、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));
    }

これは私が持っている別の関数の中にあり、実際に浮動点の算術を行っていないコードを取り巻く前進を呼び出しています。コードは最適化(ただし、デバッグシンボルがある)でコンパイルされているため、物事は大きな難読化である可能性があります。

私のコアファイルは私に完全なナンセンスを教えてくれますか、それともこれが理にかなっている方法はありますか?

役に立ちましたか?

解決

私自身の質問に答えて、何が起こったのかは、Optimizerが次のようになったコードを取ったことです。

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

それらを組み合わせました。これが、信号がstd :: advance内から上昇したように見える理由です。 OLIのコメントに従って、SIGFPEは、浮動小数点操作ではない場合でも、0に関して弾性率を採取すると発生する可能性があります。許可された別のバグがありました somecontainer コーナーケースで空になること。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top