como usar malloc dentro de uma função e devolver a matriz para o main??????

como usar malloc dentro de uma função e devolver a matriz para o main??????

por Guilherme Vieira dos Santos -
Número de respostas: 4
Ola!
em mac115 ao colocarmos como entrada uma matriz em uma função, esta devolvia para o main todas as alterações que fazia nela, a função guardava na matriz todos os dados como um ponteiro, e isso faz sentido porque uma matriz é um ponteiro.
Agora eu tentei colocar como entrada numa função um ponteiro duplo (**matriz)
alocar espaço com malloc para ele dentro da função, só que o main não recebeu a matriz que eu gerei de volta......
Alguem sabe como eu posso fazer isso??????????????????????

então eu queria fazer isso no ep1 porque como o professor falou é um processo repetido, então faria sentido eu por dentro de uma função. Mas eu não consegui sera se o professor vai tirar pontos por isso?
O senhor poderia explicar isso Professor?

Obrigado e Abraços!
Em resposta à Guilherme Vieira dos Santos

Re: como usar malloc dentro de uma função e devolver a matriz para o main??????

por Maurício Martins da Silva -
Fala Guilherme.
Se você for mais específico fica mais fácil de ajudar. Coloca aqui pelo menos o cabeçalho da função e o comando que você usou pra chamá-la.

Eu fiz dessa maneira:

double **funcao(int LinhasDaMatriz, int ColunasDaMatriz)
{
double **matriz;
...(fui alocando)
return matriz;
}

na hora de chamar essa funcao de alocamento:
matriz = funcao (linhas, colunas);

Não sei se está 100% correto, mas aqui funcionou sem erros. Espero que ajude.

Em resposta à Guilherme Vieira dos Santos

Re: como usar malloc dentro de uma função e devolver a matriz para o main??????

por Flavio Coutinho -
Oi Guilherme,

Ao alocar memória dentro da função você deve devolver o ponteiro da memória alocada como retorno da função (e sem passar um ponteiro como parêmetro).

Por exemplo, a função abaixo aloca um vetor de 50 inteiros e devolve o ponteiro para o vetor alocado.

int * alocaVetor(){
int * p = (int *) malloc (50 * sizeof(int));
return p;
}

Para alocar matrizes a idéia é a mesma do exemplo acima. Espero que esta resposta ainda esteja a tempo de ajudá-lo.

Edit: enquanto respondia o Mauricio acabou postando como fazer para o caso das matrizes. sorriso



Em resposta à Guilherme Vieira dos Santos

Re: como usar malloc dentro de uma função e devolver a matriz para o main??????

por Carlos Hitoshi Morimoto -
Oi Guilherme,
você se lembra da função malloc2D que eu dei em aula?

int ** malloc2D (int nLin, int nCol)
{
int i, j;
int **m;
m = (int **) malloc (nLin * sizeof(int *));
if (m == NULL) return m;
for (i = 0; i<nLin; i++) {
m[i] = (int *) malloc (nCol * sizeof(int));
if (m[i] == NULL) {
for (j=0; j<i; j++) free (m[i]);
free (m);
return NULL;
}
}
return m;
}

no main, basta fazer algo como:
int **matriz;
matriz = malloc2D(3, 4); /* aloca matriz 3 x 4 */

em aula também fiz algo como:
void malloc2D(int nL, int nC, int **matriz);

te+
ht