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.

Linkbacks

Use the following URL for manually sending trackbacks: http://complex.if.uff.br/lib/plugins/linkback/exe/trackback.php/orahcio:home:realloc_tip

Discussão

Thadeu PennaThadeu Penna, 2010/11/26 12:59

Fez algum teste ou benchmark ? Estas operações de realloc costumam tomar bastante tempo…

Orahcio Felício de SousaOrahcio Felício de Sousa, 2010/12/03 11:04

Apenas conferi em relação ao python. Um BFS na rede debian demorou 42s nessas novas máquinas do grupo. Com o python demorava 11min. Tenho que fazer alguns testes mais sérios, mas somente esse me animou muito pra continuar com o método NG.

Enter your comment
JESFO
 
orahcio/home/realloc_tip.txt · Última modificação: 2010/11/26 12:58 (edição externa)
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0