Usando o realloc
Dica publicada em C/C++ / Avançado
Usando o realloc
Quando fui monitor da disciplina que estuda C na faculdade,
uma das coisas em que os usuários mais erravam era no uso
do realloc.
Isso acontece por que na maioria das vezes o programador esquece de "pegar" o retorno da função. O realloc tenta realocar a quantidade de memória pedida na seqüência da já alocada, se não consegue, ele aloca uma nova área e retorna o ponteiro pra essa área, liberando a área previamente alocada, e é aí que ocorre o erro.
Isso acontece por que na maioria das vezes o programador esquece de "pegar" o retorno da função. O realloc tenta realocar a quantidade de memória pedida na seqüência da já alocada, se não consegue, ele aloca uma nova área e retorna o ponteiro pra essa área, liberando a área previamente alocada, e é aí que ocorre o erro.
char *pointer = (char *) malloc(10 * sizeof(char));
realloc(pointer, 20); /* errado */
pointer = realloc(pointer, 20); /* certo */
realloc(pointer, 20); /* errado */
pointer = realloc(pointer, 20); /* certo */
Fazendo isso as chances de ter erro no uso do realloc são quase zero.
Abraços