He realizado algunas investigaciones sobre Stackoverflow sobre reverse para bucles en C++ que usan un entero sin signo en lugar de uno firmado. Pero aún NO entiendo por qué hay un problema (vea Unsigned int reverse iteration with for loops). ¿Por qué el siguiente código producirá un error de segmentación?enteros sin signo en C++ para bucles
#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;
}
entiendo que el problema es cuando el índice i será igual a cero, ya que es algo así como un desbordamiento. Pero creo que un entero sin signo puede tomar el valor cero, ¿no? Ahora si lo reemplazo con un entero con signo, no hay absolutamente ningún problema.
¿Alguien me puede explicar el mecanismo detrás de ese lazo inverso con un entero sin signo?
Muchas gracias!
'i> = 0' siempre es verdadero para' i' sin signo, por lo que el ciclo nunca termina. – TonyK
Lea las advertencias del compilador, son útiles. En este caso, su compilador probablemente debería haberle advertido sobre el hecho de que la condición en su ciclo siempre es verdadera. – dragonroot
@dragonroot: Desafortunadamente no. Yo uso la bandera de -Wall de g ++. ¿Conoces una bandera del compilador que detectará este tipo de problema? Gracias. – Benjamin