Es más probable que un error de compilación en un código estándar o un error interno de compilación sea incorrecto. Pero he oído hablar de compiladores que optimizan bucles olvidando incorrectamente algunos efectos secundarios que puede causar un método.
No tengo sugerencias sobre cómo saber si es usted o el compilador. Puedes probar con otro compilador.
Un día me preguntaba si era mi código o no, y alguien me sugirió que me atendiera. Gasté los 5 o 10 minutos para ejecutar mi programa con él (creo que valgrind --leak-check=yes myprog arg1 arg2
lo hizo pero jugué con otras opciones) e inmediatamente me mostró UNA línea que se ejecuta en un caso específico, que era el problema. Entonces mi aplicación se ejecutó sin problemas desde entonces sin errores extraños, errores o comportamiento extraño. Valgrind u otra herramienta como esta es una buena manera de saber si es su código.
Nota al margen: una vez me pregunté por qué el rendimiento de mi aplicación apestó. Resultó que todos mis problemas de rendimiento también estaban en una línea. Escribí for(int i=0; i<strlen(sz); ++i) {
. El sz fue unos pocos mb. Por alguna razón, el compilador ejecutó strlen todas las veces incluso después de la optimización. Una línea puede ser un gran problema. Desde actuaciones hasta choques