Core File Complete Nonsenseまたはこのコードは本当にSIGFPEを投げたのでしょうか?
質問
私のコアファイルは、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
コーナーケースで空になること。
所属していません StackOverflow