Partilho o meu código exemplo em imagem
#include <stdio.h>
#include <stdlib.h>
char** mapa;
int linhas = 0, colunas = 0;
void loadMap();
void printMap();
void freeMap();
int main() {
// Loap Map
loadMap();
// Print Map
printMap();
// Realse memory
freeMap();
return 0;
}
void loadMap() {
FILE * f;
f = fopen("mapa.txt","r");
if(f == 0) {
printf("Erro na leitura do mapa\n");
exit(1);
}
fscanf(f,"%d %d", &linhas, &colunas);
printf("Linhas: %d, Colunas: %d;\n", linhas, colunas);
// Allocation memory using malloc function:
mapa = malloc(sizeof(char) * linhas);
int i;
for(i = 0;i<linhas; i++) {
mapa = (char**)malloc(sizeof(char*) * linhas);
//Comment: char ** mapa = (char**) malloc(sizeof(char*) *linhas); -> (type cast - explicity)
}
for (int i = 0; i < linhas; i++) {
mapa[i] = (char*)malloc(sizeof(char) * (colunas + 1)); // Allocation memory for a line
if (mapa[i] == NULL) {
printf("Erro na alocação de memória para linha %d\n", i);
exit(1);
}
if (fscanf(f, "%s", mapa[i]) != 1) {
printf("Erro na leitura da linha %d\n", i);
exit(1);
}
}
fclose(f);
}
void printMap() {
int i;
for(i = 0; i < linhas; i++) {
printf("%s\n",mapa[i]);
}
}
void freeMap() {
int i;
for(i = 0; i < linhas; i++) {
free(mapa[i]);
}
free(mapa);
}