Não gosto de usar variáveis globais, como passo um ponteiro de ponteiro (**mapa) como parâmetro para uma função para desalocar a matriz?
Neste código a variável char **mapa é global, se eu a declarar na main, como eu devo passa-la para as funções que vão precisar dela?
// main.c
#include <stdio.h>
#include <stdlib.h>
#include "Duvida.h"
char** mapa;
void alocamapa(int linhas, int colunas)
{
int i;
mapa = malloc(sizeof(char*) * linhas);
for(i = 0; i < linhas; i++)
{
mapa[i] = malloc(sizeof(char) * colunas + 1);
}
}
void lemapa(int *linhas, int *colunas)
{
int i = 0;
FILE* f;
f = fopen("mapa.txt", "r");
if(f == 0)
{
printf("Erro na leitura do mapa");
exit(1);
}
fscanf(f, "%d %d", &*linhas, &*colunas);
alocamapa(*linhas, *colunas);
for(i = 0; i < 5; i++)
{
fscanf(f, "%s", mapa[i]);
}
fclose(f);
}
void liberamapa(int linhas)
{
int i;
for(i = 0; i < linhas; i++)
{
free(mapa[i]);
}
free(mapa);
}
int main()
{
int i, linhas, colunas;
lemapa(&linhas, &colunas);
for(i = 0; i < linhas; i++)
{
printf("%s\n", mapa[i]);
}
liberamapa(linhas);
return 0;
}
//Duvida.h
void alocamapa();
void lemapa();
void liberamapa();