Ho fatto qualche ricerca su Stackoverflow sul reverse per loop in C++ che usano un intero senza segno invece di uno firmato. Ma ancora non capisco perché c'è un problema (vedi Unsigned int reverse iteration with for loops). Perché il codice seguente produrrà un errore di segmentazione?Numeri interi senza segno in C++ per loop
#include <vector>
#include <iostream>
using namespace std;
int main(void)
{
vector<double> x(10);
for (unsigned int i = 9; i >= 0; i--)
{
cout << "i= " << i << endl;
x[i] = 1.0;
}
cout << "x0= " << x[0] << endl;
return 0;
}
Capisco che il problema è quando l'indice i sarà pari a zero, perché c'è qualcosa di simile a un overflow. Ma penso che un intero senza segno sia autorizzato a prendere il valore zero, non è vero? Ora se lo sostituisco con un numero intero con segno, non c'è assolutamente alcun problema.
Qualcuno può spiegarmi il meccanismo dietro quel ciclo inverso con un numero intero senza segno?
Grazie mille!
'i> = 0' è sempre vero per unsigned' i', quindi il ciclo non termina mai. – TonyK
Leggi gli avvertimenti del compilatore, sono utili. In questo caso, probabilmente il compilatore dovrebbe averti avvertito del fatto che la condizione nel tuo loop è sempre vera. – dragonroot
@dragonroot: Purtroppo no. Io uso il flag -Wall di g ++. Conoscete un flag del compilatore che rileverà questo tipo di problema? Grazie. – Benjamin