esquema de recorrido c++

Buenas, estoy iniciandome en SDL y estoy intentando hacer un pequeño 3 en raya. La cosa es que tengo problemas para inicializar unas variables en una tabla de 3 x 3 (bidimensional), vamos, que me he quedado en lo más básico, si mi profesor de programación me viera..., en fin, este es el codigo:

tabla::tabla() {
  imagen = IMG_Load("Imagenes/tablero.png");
  circulo = IMG_Load("Imagenes/circulo.png");
  equis = IMG_Load("Imagenes/equis.png");
  pos.x=0;
  pos.y=0;
  pos.w=imagen->w;
  pos.h=imagen->h;
  for (int i=0; i<=2; i++){
   for (int j=0; j<=2; j++){
       cuadro[i][j].x=(pos.w/3)*i;
       cuadro[i][j].y=(pos.h/3)*j;
       cuadro[i][j].w=equis->w;
       cuadro[i][j].h=equis->h;
       }
   }
}


La tabla cuadro esta declarado como "SDL_Rect cuadro[2][2]". Lo que estoy intentando hacer, es inicializar los valores de cada celda (x, y, w, h) al valor de la posicion en los que quiero que me los pinte en pantalla. El caso es que despues de volverme loco, al depurar me doy cuenta de cuando suspuestamente i y j tienen un valor por ejemplo de 1, 0, me cambia la celda 0, 2 por ejemplo, y me estoy volviendo loco, a ver si me podeis hechar una mano.
¿No debería ser SDL_Rect cuadro[3][3]?

Si declaras un array de dimensión x, sólo puedes iterar desde 0 a x-1. Estás accediendo a cuadro[2][2] que está fuera de límites y las consecuencias son impredecibles.

Un saludo.
Jaime escribió:¿No debería ser SDL_Rect cuadro[3][3]?

Si declaras un array de dimensión x, sólo puedes iterar desde 0 a x-1. Estás accediendo a cuadro[2][2] que está fuera de límites y las consecuencias son impredecibles.

Un saludo.

+1.
PD: a mí al ejecutar programas hechos en C que no he hecho correctamente, me han llegado hasta apagar el pc, pitidos raros, etc... xDD
Ainsh... estas son las cosas que le pasan a uno por ponerse a programar a la 1 de la noche... Tambien es que C es aquel precioso lenguaje de programación que dice: ¿Qué se ha salido de la tabla?, va... pues nada, pa lante que este sabrá lo que esta haciendo xD
Chaky escribió:Ainsh... estas son las cosas que le pasan a uno por ponerse a programar a la 1 de la noche... Tambien es que C es aquel precioso lenguaje de programación que dice: ¿Qué se ha salido de la tabla?, va... pues nada, pa lante que este sabrá lo que esta haciendo xD

esto me está pasando más en PHP, funcionar funciona caaaasi todo, pero haciendo lo que le sale del mismo ... xD
Chaky escribió:Ainsh... estas son las cosas que le pasan a uno por ponerse a programar a la 1 de la noche... Tambien es que C es aquel precioso lenguaje de programación que dice: ¿Qué se ha salido de la tabla?, va... pues nada, pa lante que este sabrá lo que esta haciendo xD

Que gran verdad joder xD
Ehm.... menos culpar al lenguaje y más culpar a la forma tan pedestre que teneis de depurar. Errores como estos los caza valgrind sin esfuerzo alguno. Además de que se ven fácilmente en un depurador.

- ferdy
Primero no he hechado la culpa al lenguaje, a sido un fallo mio, y bastante bastante idiota la verdad... El comentario lo he hecho a posteriori.
No obstante si bien C me parece un gran lenguaje, que tiene muchisimos "pros", es muy potente,tiene una grán documenteción, y que ademas muchisimos programdores comienzan con él. Pero a mi parecer es un error que un lenguaje te deje acceder a una parte de un tabla o array fuera de sus limites declarados. Recuerdo que mi profesor de programación tambien nos decía que esta era una característica muy criticada del mismo.
Es una decisión de diseño del lenguaje. Es así, porque es mejor que sea así. Por otro lado, es muy fácil hacer un 'array que no te permita acceder donde no debes' si eso fuera necesario.

- ferdy
8 respuestas