estou fazendo um codigo a parte do professor pra tentar aprender, só q estou com um problema, fiz uns teste na depuracao e vi que minha matriz nao esta alocando corretamente, por isso quando tento acessar o pedaço dela pra fazer o pacman se mover, da um erro de acesso indevido a memoria, mas nao faço ideia do que eu esteja fazendo errado, alguem consegui me ajudar? Codigo:
#include<stdio.h>
#include<stdlib.h>
#include<strings.h>
#include<errno.h>
#define limpaBuf while(getchar()!='\n');
char **mapa;
FILE* abriArquivo(char* nomeDoArquivo, char*modoDeAAb){
FILE*f = fopen(nomeDoArquivo, modoDeAAb);
if(f==NULL){
printf("arquivo errado ou inexistente, ERRO: %s", strerror(errno));
exit(1);
}
return f;
}
void aumentaMatriz(int colunas, int linhas){
mapa = malloc(sizeof(char)*linhas);
for(int i =0; i<linhas; i++){
mapa[i] = malloc(sizeof(char)*colunas);
}
}
void preencheMapa(FILE *f, int tamanho, char *map){
for(int i = 0; i<tamanho; i++){
*(map+i) = fgetc(f);
}
}
void imprimeMat(char *map, int tamanho){
for(int i = 0; i<tamanho; i++){
printf("%c", *(map+i));
}
}
void liberaMapa(int linhas){
for(int i = 0; i<linhas; i++){
free(mapa[i]);
}
}
void movaPersonagem(int *linhaPersonagem, int *colunaPersonagem, char acao){
if(acao == 'a'){
mapa[(*linhaPersonagem)][(*colunaPersonagem)]='.';
--*colunaPersonagem;
}else
if(acao == 'd'){
mapa[(*linhaPersonagem)][(*colunaPersonagem)]='.';
++*colunaPersonagem;
}else
if(acao == 'w'){
mapa[(*linhaPersonagem)][(*colunaPersonagem)]='.';
++*linhaPersonagem;
}else
if(acao == 's'){
mapa[(*linhaPersonagem)][(*colunaPersonagem)]='.';
--*linhaPersonagem;
}
mapa[(*linhaPersonagem)][(*colunaPersonagem)]='@';
}
int main(){
int colunas, linhas, linhaPerso, colunaPerso;
char Acao = 27;
FILE *f;
f = abriArquivo("mapa.txt", "r");
fscanf(f, "%d %d %d %d ", &linhas, &colunas, &linhaPerso, &colunaPerso);
aumentaMatriz(colunas, linhas);
printf("%d\n", sizeof(mapa));
preencheMapa(f, linhas*colunas, &mapa);
do{
if(Acao != 27){
movaPersonagem(&linhaPerso, &colunaPerso, Acao);
}
imprimeMat(&mapa, linhas*colunas);
Acao = getchar();
limpaBuf;
}while(Acao!=27);
return 0;
}
mapa:
5 12 2 6
|--------|
|....@...|
|--..||..|
|........|
|--------| ****