====== Realocando dinâmicamente a memória no C ======
Para o uso da função //realloc// do //ANSI C// algum cuidado é necessário, primeiramente a dica de [[http://www.vivaolinux.com.br/dica/Usando-o-realloc]] é muito boa.
A função deve ser chamada como o valor para um ponteiro e passada como parâmetro para que os endereços de memória fiquem todos bem organizados. Isso vale se você for implementar uma função que insere um elemento numa pilha também, isto é, o que se espera da sintaxe correta para o //realloc//
deve se esperar da sua nova função:
void *inserir(int x, int *P, int *tam) {
P=(int *)realloc(P,(*tam+1)*sizeof(int));
P[*tam]=x;
*tam=*tam+1;
}
Essa função irá colocar o inteiro //x// na pilha //P//, previamente alocada com o espaço para um inteiro no mínimo, porém a posição da memória do ponteiro //P// ficará bagunçada, logo o correto será:
int *inserir(int x, int *P, int *tam) {
P=(int *)realloc(P,(*tam+1)*sizeof(int));
P[*tam]=x;
*tam=*tam+1;
return P;
}
Agora quando for inserir um inteiro num trecho do seu programa basta fazer:
Q=inserir(3,Q,&tam_Q);
e a memória RAM é o limite.
{{tag>}}
~~LINKBACK~~
~~DISCUSSION~~