Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Gestion dinamica de memoria

Estas en el tema de Gestion dinamica de memoria en el foro de C/C++ en Foros del Web. Tengo las siguientes funciones: Código: 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; ...
  #1 (permalink)  
Antiguo 24/07/2009, 21:03
 
Fecha de Ingreso: junio-2008
Mensajes: 4
Antigüedad: 15 años, 10 meses
Puntos: 0
Gestion dinamica de memoria

Tengo las siguientes funciones:

Código:
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.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 14:32.