archivo completo disparate núcleo o podría este código realmente han arrojado una SIGFPE?

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

Pregunta

Mis principales reclamos de archivo que un SIGFPE fue arrojado desde

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

en la línea 176. Se trata aquí:

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

Esto está dentro de otra función que tengo que se llama de hecho antemano que rodea por código que no está haciendo ninguna aritmética de punto flotante. El código se compila con optimizaciones (pero ha símbolos de depuración), así que las cosas pueden ser un gran ofuscado.

Es mi archivo de núcleo solo decírmelo absurdo completo o hay una forma en que esto podría tener sentido?

¿Fue útil?

Solución

En respuesta a mi propia pregunta, lo que sucedió es que optimizador de código que se veía así:

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

y las ha combinado. Es por esto que aparezca la señal se elevó desde el interior std :: antelación. Siguiendo el comentario de Oli, SIGFPE puede ocurrir cuando se toma el módulo con respecto a 0, a pesar de que no es una operación de punto flotante. Hubo un error diferente que permitió somecontainer a estar vacío en un caso esquina.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top