Estoy recién empezando a realizar un juego en C y lo puedo compilar y funciona todo bien hasta que llega a la función actualizarPiezas, al intentar designarle valores a un arreglo 2x2 específicamente. Me tira un error de segmentación ("Fallo de segmentacion"). Si pongo como comentario la designación del arreglo 2x2 me compila y funciona todo perfectamente.
(Lo compilé desde ubuntu con gcc 4.4.3)
Función donde me tira el error
Código:
void actualizacionPiezas(int *piezas[8][8], int *equipoBlanco, int *equipoNegro){
int i,j;
for(i=0 ; i<8 ; i++){
for(j=0 ; j<8 ; j++){
*piezas[i][j] = 7; //<============================= ERROR
}
}
}
Codigo completo (hasta ahora )
Código:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define limpiarPantalla system("clear");
char menu();
void jugar();
void ingresarNombreJugador();
void informacion();
void ingresarEquipoJugador();
void actualizacionPiezas();
void tomarPieza();
////////////////////////////////////////////////////////////////////////////////////////_____________________________________
int main(){ ///////////////////////////////////////////////////////////////////////////|| MAIN
switch(menu()){
case '1': jugar(); break;
case '2': informacion(); break;
case '3': return 0; break;
}
}
////////////////////////////////////////////////////////////////////////////////////////_____________________________________
char menu(){ //////////////////////////////////////////////////////////////////////////|| MENÚ
char opcion;
limpiarPantalla
printf(" 1. Jugar \n 2. Informacion \n 3. Salir \n\n Seleccione una opcion y presione ENTER\n\n >:");
do{opcion = getchar();} while(opcion != '1' && opcion != '2' && opcion != '3');
limpiarPantalla
return opcion;
}
////////////////////////////////////////////////////////////////////////////////////////_____________________________________
void jugar(){ /////////////////////////////////////////////////////////////////////////|| JUGAR
char jugadorBlanco[30], jugadorNegro[30];
int equipoBlanco, equipoNegro, tomarPiezaX, tomarPiezaY, piezas[8][8];
ingresarNombreJugador(&jugadorBlanco, &jugadorNegro);
limpiarPantalla
ingresarEquipoJugador(&equipoBlanco, &equipoNegro);
limpiarPantalla
actualizacionPiezas(&piezas, &equipoBlanco, &equipoNegro);
limpiarPantalla
tomarPieza(&tomarPiezaX, &tomarPiezaY);
}
////////////////////////////////////////////////////////////////////////////////////////_____________________________________
void ingresarNombreJugador(char *jugadorBlanco, char *jugadorNegro){ /////////////////|| INGRESAR NOMBRE JUGADOR
printf("Ingrese el nombre del jugador blanco\n\n >: ");
scanf("%s", &*jugadorBlanco);
printf("\nIngrese el nombre del jugador negro\n\n >: ");
scanf("%s", &*jugadorNegro);
}
////////////////////////////////////////////////////////////////////////////////////////_____________________________________
void ingresarEquipoJugador(int *equipoBlanco, int *equipoNegro){ //////////////////////|| INGRESAR EQUIPO JUGADOR
printf("Clasico: 1\nJapones: 2\nMayas: 3\n\n");
printf("Ingrese el equipo del jugador blanco\n\n >: ");
scanf("%d", &*equipoBlanco);
printf("\nIngrese el equipo del jugador negro\n\n >: ");
scanf("%d", &*equipoNegro);
switch(*equipoBlanco){
case 1: *equipoBlanco = 0; break;
case 2: *equipoBlanco = 2; break;
case 3: *equipoBlanco = 4; break;
}
switch(*equipoNegro){
case 1: *equipoNegro = 1; break;
case 2: *equipoNegro = 3; break;
case 3: *equipoNegro = 5; break;
}
}
////////////////////////////////////////////////////////////////////////////////////////_____________________________________
void informacion(){ ///////////////////////////////////////////////////////////////////|| INFORMACIÓN
printf("\ninformacion\n");
}
////////////////////////////////////////////////////////////////////////////////////////_____________________________________
void actualizacionPiezas(int *piezas[8][8], int *equipoBlanco, int *equipoNegro){ ////|| ACTUALIZACIÓN PIEZAS
int i,j; // IGUALAMOS EL TABLERO ENTERO A 7 (VACÍO)
for(i=0 ; i<8 ; i++){
for(j=0 ; j<8 ; j++){
*piezas[i][j] = 7; //<============================= ERROR
}
}
}
////////////////////////////////////////////////////////////////////////////////////////_____________________________________
void tomarPieza(int *tomarPiezaX, int *tomarPiezaY){ /////////////////////////////////////|| TOMAR PIEZA
char aux1;
printf("Ingrese las coordenadas 'x' e 'y' (Ejemplo: b5)\n\n >: ");
scanf("%c%d", &aux1, &*tomarPiezaY);
switch(aux1){
case 'a': *tomarPiezaX = 0; break;
case 'b': *tomarPiezaX = 1; break;
case 'c': *tomarPiezaX = 2; break;
case 'd': *tomarPiezaX = 3; break;
case 'e': *tomarPiezaX = 4; break;
case 'f': *tomarPiezaX = 5; break;
case 'g': *tomarPiezaX = 6; break;
case 'h': *tomarPiezaX = 7; break;
}
switch(*tomarPiezaY){
case 1: *tomarPiezaY = 0; break;
case 2: *tomarPiezaY = 1; break;
case 3: *tomarPiezaY = 2; break;
case 4: *tomarPiezaY = 3; break;
case 5: *tomarPiezaY = 4; break;
case 6: *tomarPiezaY = 5; break;
case 7: *tomarPiezaY = 6; break;
case 8: *tomarPiezaY = 7; break;
}
}
No se me ocurre cual puede ser el error
Por favor si alguien puede ayudarme a descubrir el error le estaré muy agradecido
Saludos!