Ajuda com alocação dinamica. [RESOLVIDO]

1. Ajuda com alocação dinamica. [RESOLVIDO]

Andre
andrerm2k

(usa Outra)

Enviado em 18/02/2009 - 21:29h

Olá, to tendo uma dificuldade ao fazer uma função. O código fonte é mais ou menos este:

#include <stdio.h>
#include <stdlib.h>

void aloca (int *pt) {
pt=(int*)calloc(2,sizeof(int));
pt[0]=0;
pt[1]=1;
printf ("%d %d\n",pt[0],pt[1]); //mostra os numeros certos
}

int main (void) {
int *pt;
aloca(pt);
printf ("%d %d\n",pt[0],pt[1]); //mostra os numeros errados
system ("pause");
return 0;
}

Quando a função "aloca" termina, o vetor alocado é perdido. Como posso resolver isso? Agradeço desde ja.

PS: A alocação e o preenchimento do vetor com valores deve ser necessariamente em uma função diferente da main. O ponteiro a ser usado deve ser necessariamente declarado na main.


  


2. Re: Ajuda com alocação dinamica. [RESOLVIDO]

Fagner Amaral de Souza Candido
f_Candido

(usa Ubuntu)

Enviado em 18/02/2009 - 21:51h

Olá Boa Noite,

Vamos lá:
Uma possível solução:
aloca(&pt); aqui mandamos o endereço do ponteiro, logo a função aloca deve ser modificado, recebendo portanto, um ponteiro para ponteiro como argumento:
void aloca (int **pt) {
...
Observações:
Você aloca o ponteiro, logo deve verificar se a alocação obteve exito, boa prática de programação.
Ponteiro alocado, deverá ser desalocado, logo, você não desaloca o ponteiro.
Não use system. Sugestão: getchar()

Abraços, qualquer dúvida posta aí.

Código :


#include <stdio.h>
#include <stdlib.h>

void aloca (int **pt) {
(*pt)=(int*)calloc(2,sizeof(int));
// validar apos alocacao
(*pt)[0]=0;
(*pt)[1]=1;
printf ("%d %d\n",(*pt)[0],(*pt)[1]); //mostra os numeros certos
}

int main (void) {
int *pt;
aloca(&pt);
printf ("%d %d\n",pt[0],pt[1]); //mostra os numeros errados
//liberar ponteiro
//Nao use system, use por exemplo getchar();
system ("pause");
return 0;
}


3. Re: Ajuda com alocação dinamica. [RESOLVIDO]

Andre
andrerm2k

(usa Outra)

Enviado em 18/02/2009 - 21:59h

Muito obrigado f_Candido, problema resolvido.
Tava fazendo exatamente isso, mas tava me enrolando na sintaxe que iria usar.
E obrigado pelas observações.






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts