Programación General > C/C++

 Gestion dinamica de memoria

(1/1)

keyboardwizz:
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.

Navegación

[0] Índice de Mensajes

Ir a la versión completa