Código:
Donde board es una matriz de este estilo:int validMove(const char board[7][7], char direccion, int x,int y){ switch (direccion){ case 'N': if(y>1 && board[y-1][x]=='1' && board[y-2][x]=='1') return 1; break; case 'S': if(y<5 && board[y+1][x]=='1' && board[y+2][x]=='1') return 1; break; case 'O': if(x>1 && board[y][x-1]=='1' && board[y][x-2]=='1') return 1; break; case 'E': if(x<5 && board[y][x+1]=='1' && board[y][x+2]=='1') return 1; break; default: printf("Mal llamada de la funcion"); } } int findMoves(char** moves,const char board[7][7]){ int i,j; int n=0; for(i=0;i<7;++i){ for(j=0;j<7;++j){ if(board[i][j]=='0'){ if(validMove(board,'N',j,i)){ ++n; moves = realloc(moves,n*sizeof(char*)); moves[n-1] = malloc(6*sizeof(char)); sprintf(moves[n-1],"%i-%i",(i-2)*10+j,i*10+j); } if(validMove(board,'S',j,i)){ ++n; moves = realloc(moves,n*sizeof(char*)); moves[n-1] = malloc(6*sizeof(char)); sprintf(moves[n-1],"%i-%i",(i+2)*10+j,i*10+j); } if(validMove(board,'E',j,i)){ ++n; moves = realloc(moves,n*sizeof(char*)); moves[n-1] = malloc(6*sizeof(char)); sprintf(moves[n-1],"%i-%i",i*10+j+2,i*10+j); } if(validMove(board,'O',j,i)){ ++n; moves = realloc(moves,n*sizeof(char*)); moves[n-1] = malloc(6*sizeof(char)); sprintf(moves[n-1],"%i-%i",i*10+j-2,i*10+j); } } } } return n; }
2 2 1 1 1 2 2
2 2 1 1 1 2 2
1 1 1 1 1 1 1
1 1 1 0 1 1 1
1 1 1 1 1 1 1
2 2 1 1 1 2 2
2 2 1 1 1 2 2
Sin espacios claramente.
Es el juego del solitario y las funciones buscan los movimientos que es posible hacer.
Cuando lo corri aparentemente funciono correctamente, porque se imprimieron los 4 movimientos posibles (mover piezas al centro), pero luego hice un debug y me di cuenta que cuando entra al tercer "if" de findMoves en vez de reservar una cadena de caracteres mas reserva 5. No se me ocurre porque podría ser.