archivo completo disparate núcleo o podría este código realmente han arrojado una SIGFPE?
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?
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.