Viernes 8 de Noviembre de 2024, 21:47
SoloCodigo
Bienvenido(a),
Visitante
. Por favor,
ingresa
o
regístrate
.
¿Perdiste tu
email de activación?
Inicio
Foros
Chat
Ayuda
Buscar
Ingresar
Registrarse
SoloCodigo
»
Foros
»
Programación General
»
C/C++
(Moderador:
Eternal Idol
) »
Gestion dinamica de memoria
« anterior
próximo »
Imprimir
Páginas: [
1
]
Autor
Tema: Gestion dinamica de memoria (Leído 686 veces)
keyboardwizz
Nuevo Miembro
Mensajes: 1
Gestion dinamica de memoria
«
en:
Sábado 25 de Julio de 2009, 05:10 »
0
Tengo las siguientes funciones:
Código: Text
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;
}
Donde board es una matriz de este estilo:
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.
Tweet
Imprimir
Páginas: [
1
]
« anterior
próximo »
SoloCodigo
»
Foros
»
Programación General
»
C/C++
(Moderador:
Eternal Idol
) »
Gestion dinamica de memoria