Ainda não tem acesso? Estude com a gente! Matricule-se
Ainda não tem acesso? Estude com a gente! Matricule-se

Solucionado (ver solução)

Erro de falha na segmentação

Oi, pessoal, tudo bem? Recebi esse erro de falha na segmentação do meu código mas não consegui achar onde estou errando. Vi que tem outro tópico similar ao meu mas a resposta não resolveu meu problema. Segue meu código:

#include <stdio.h>
#include <stdlib.h>
#include "fogefoge.h"

char** mapa;
int linha;
int coluna;

void lemapa() {
    FILE* f;
    f = fopen("mapa.txt", "r"); 

    if(f == 0) {
        printf("Mapa não encontrado\n");
        exit(1);
    }
    fscanf(f, "%d %d", &linha, &coluna);

    alocamapa(); 

    for(int i = 0; i < 5; i++) {
        fscanf(f, "%s", mapa[i]);
    }

    fclose(f);
}

void alocamapa() {
    mapa = malloc(sizeof(char*) * linha);

    for(int i = 0; i < linha; i++){
        mapa[i] = malloc(sizeof(char) * coluna + 1);
    }    
}

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

    free(mapa);
}

int acabou() {
    return 0;
}

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

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

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

void imprimemapa(){
    for(int i = 0; i < linha; i++) {
        printf("%s\n", mapa[i]);
    }
}

int main() {

    lemapa();

    do {

        imprimemapa();

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

        move(comando);

    } while (!acabou());

    liberamapa();
}
1 resposta
solução

Olá Bianca, tudo bem com você?

Dando uma olhada em seu código vi que você cometeu um pequeno deslize na hora de percorrer a matriz, veja :)

    for(int i = 0; i < linha; i++){
        for(int j = 0; j < coluna; i++){

Na segunda linha deveríamos ter utilizado o j++, provavelmente com o duplo incremento gerou algum erro de segment fault ao percorrer a matriz

Trocando para j++ irá funcionar corretamente :)

Abraços e Bons Estudos!

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software