Erro segmentation fault quando pressiono alguma tecla

0 respostas
Victor_Martins
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

char** mapa;
int linhas;
int colunas;
FILE* f;

void tamanhodomapa()
{

        f = fopen("mapa.txt", "r");

        if(f == 0)
        {
                printf("erro na abertura do arquivo\n");
                exit(1);
        }

        fscanf(f, "%d %d", &linhas, &colunas);
        printf("%d-%d\n", linhas, colunas);
}

void alocamapa()
{
        tamanhodomapa();

        mapa = malloc(sizeof(char*) * linhas); //alocar memoria para o mapa
        for(int i = 0; i < linhas; i++)
        {
                mapa[i] = malloc(sizeof(char) * colunas + 1); //alocar memoria para as colunas
        }

        for(int i = 0; i < linhas; i++) 
        {
                fscanf(f, "%s", mapa[i]); //ler todas as linhas e botar em mapa[i]
        }

        fclose(f);
}

void liberamapa()
{
        for(int j = 0; j < linhas; j++)
        {
                free(mapa[j]);
        }
        free(mapa);
}

void imprimimapa()
{
        for(int j = 0; j < linhas; j++)
        {
                printf("%s\n", mapa[j]); //imprimir as linhas do mapa
        }
}

void personagem(char direcao)
{
        int x;
        int y;

        for(int i = 0; i < linhas; i++)
        {
                for(int j; j < colunas; j++)
                {
                        if(mapa[i][j] == '@')
                        {
                                x = i;
                                y = j;
                                break;
                        }
                }
        }

        switch(direcao)
        {
                case 'a':
                        mapa[x][y-1] = '@';
                        break;
                case 's':
                        mapa[x-1][y] = '@';
                        break;
                case 'd':
                        mapa[x][y+1] = '@';
                        break;
                case 'w':
                        mapa[x+1][y] = '@';
                        break;
        }
        mapa[x][y] = '.';

}

int main()
{
        int acabou = 0;
        alocamapa();

        do
        {
                imprimimapa();

                char comando;

                scanf(" %c", &comando);
                personagem(comando);

        }while(!acabou);
        liberamapa();

}
Criado 20 de abril de 2020
Respostas 0
Participantes 1