====== 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~~