Ottenere un errore di compilazione sul codice standard o un errore di compilazione interno è più probabile che gli ottimizzatori siano errati. Ma ho sentito parlare di compilatori che ottimizzano i loop dimenticando erroneamente alcuni effetti collaterali di un metodo.
Non ho suggerimenti su come sapere se sei tu o il compilatore. Puoi provare un altro compilatore.
Un giorno mi stavo chiedendo se fosse il mio codice o meno e qualcuno mi ha suggerito di darmi un tocco. Ho speso i 5 o 10 minuti per eseguire il mio programma con esso (penso che valgrind --leak-check=yes myprog arg1 arg2
l'abbia fatto ma ho giocato con altre opzioni) e immediatamente mi ha mostrato UNA linea che viene eseguita in un caso specifico che era il problema. Poi la mia app ha funzionato senza problemi da allora, senza strani crash, errori o comportamenti strani. valgrind o un altro strumento come questo è un buon modo per sapere se è il tuo codice.
Nota a margine: una volta mi sono chiesto perché le prestazioni della mia app hanno risucchiato. Si è scoperto che tutti i miei problemi di prestazioni erano in una sola riga. Ho scritto for(int i=0; i<strlen(sz); ++i) {
. Il sz era alcuni mb. Per qualche motivo il compilatore ha eseguito strlen ogni volta anche dopo l'ottimizzazione. Una linea può essere un grosso problema. Dalle prestazioni agli arresti anomali