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!
como usar malloc dentro de uma função e devolver a matriz para o main??????
Número de respostas: 4
Em resposta à Guilherme Vieira dos Santos
Re: como usar malloc dentro de uma função e devolver a matriz para o main??????
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.
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.
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.
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
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
Em resposta à Carlos Hitoshi Morimoto
Re: como usar malloc dentro de uma função e devolver a matriz para o main??????
Agora eu entendi como fazer obrigado a todos!!!!!
Abraços!
Abraços!