Olá Pedro! Joia?
Vamos ajustar seu código para garantir que a alocação e leitura sejam feitas corretamente. Aqui estão alguns pontos que precisam ser corrigidos:
- Alocação de Memória Antes da Leitura: A alocação de memória para
mapa
deve ser feita antes de tentar ler os dados do arquivo. - Verificação do Arquivo: A verificação se o arquivo foi aberto corretamente deve ser feita logo após a tentativa de abertura.
- Laços de Leitura e Impressão: Os laços que leem e imprimem o mapa devem usar as variáveis
linhas
e colunas
corretamente.
Aqui está a versão corrigida do seu código:
#include <iostream>
#include <stdlib.h>
#include <locale.h>
using namespace std;
char** mapa;
int linhas, colunas;
int main()
{
setlocale(LC_ALL,""); // Ativa o uso de acentos
FILE *f;
f = fopen("mapa.txt", "r");
if (f == nullptr)
{
printf("Erro na leitura do mapa");
exit(1);
}
fscanf(f, "%d %d", &linhas, &colunas);
// Alocação dinâmica da matriz
mapa = (char**)malloc(sizeof(char*) * linhas);
for (int i = 0; i < linhas; i++)
{
mapa[i] = (char*)malloc(sizeof(char) * (colunas + 1)); // +1 para o caractere nulo
}
// Leitura do mapa do arquivo
for (int i = 0; i < linhas; i++)
{
fscanf(f, "%s", mapa[i]);
}
// Impressão do mapa
for (int i = 0; i < linhas; i++)
{
printf("%s\n", mapa[i]);
}
fclose(f);
// Liberação da memória alocada
for (int i = 0; i < linhas; i++)
{
free(mapa[i]);
}
free(mapa);
system("pause");
return 0;
}
Pontos Importantes:
- Alocação Dinâmica: A alocação da matriz
mapa
é feita após a leitura das dimensões do arquivo. - Leitura e Impressão: Os laços usam
linhas
para iterar corretamente sobre o mapa. - Verificação do Arquivo: A verificação se o arquivo foi aberto corretamente é feita imediatamente após a tentativa de abertura.
Espero ter ajudado e bons estudos!
Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓.