Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Como passar ponteiro de ponteiro como parâmetro?

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();
1 resposta
solução!

Olá, Cícero! Não entendi direito o que você está tentando fazer. Pode mandar o código (ou o trecho da função)? Porque quando você vai passar uma matriz como parâmetro de função, você está na realidade passando por referência um ponteiro que aponta para a primeira posição da matriz. Você está fazendo um ponteiro que aponta para o ponteiro dessa primeira posição, é isso?