un non-sens complet du fichier de base ou ce code pourrait vraiment avoir jeté un SIGFPE?

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

Question

Mon dossier de base allégations selon lesquelles une SIGFPE a été jeté

gcc-4.3.4 / include / c ++ / 4.3.4 / bits / stl_iterator_base_funcs.h

sur la ligne 176. Ceci est ici:

  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));
    }

est dans une autre fonction que j'ai qui fait appeler l'avance autour du code qui ne fait pas une arithmétique à virgule flottante. Le code est compilé avec des optimisations (mais a des symboles de débogage), donc les choses peuvent être un grand brouillées.

Mon fichier core me dire un non-sens complet ou est-il une façon dont cela pourrait avoir un sens?

Était-ce utile?

La solution

En réponse à ma propre question, ce qui est arrivé est que optimiseur a pris du code qui ressemblait à ceci:

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

et les combinés. Voilà pourquoi il semble que le signal a été élevé à l'intérieur std :: avance. A la suite du commentaire de Oli, SIGFPE peut se produire lorsque vous prenez le module par rapport à 0, même si ce n'est pas une opération à virgule flottante. Il y avait un bug différent qui a permis somecontainer d'être vide dans une affaire d'angle.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top