Reallocating a memória
É possível muitas vezes quando você programar que você quer reallocate a memória. Isto é feito com a função do realloc. A função do realloc faz exame de dois parâmetros, do endereço baixo da memória que você quer resize, e da quantidade de espaço você quer reservar e retornos um ponteiro ao endereço baixo.
Supôr que nós reservamos o espaço para um ponteiro chamado msg e nós queremos reallocate o espaço à quantidade de espaço que faz exame já acima, mais o comprimento de uma outra corda então nós poderíamos usar o seguinte.
msg = (char *)realloc(msg, (strlen(msg) + strlen(buffer) + 1)*sizeof(char));
O seguinte programa ilustra o uso do malloc, realloc e livra-o. O usuário entra em uma série das cordas que são juntadas junto. O programa para cordas da leitura quando uma corda vazia é entrada.
#include <string.h>
#include <malloc.h>
int main()
{
char buffer[80], *msg;
int firstTime=0;
do
{
printf("\nEnter a sentence: ");
gets(buffer);
if (!firstTime)
{
msg = (char *)malloc((strlen(buffer) + 1) *
sizeof(char));
strcpy(msg, buffer);
firstTime = 1;
}
else
{
msg = (char *)realloc(msg, (strlen(msg) +
strlen(buffer) + 1) * sizeof(char));
strcat(msg, buffer);
}
puts(msg);
} while(strcmp(buffer, ""));
free(msg);
return 0;
}
A saída do programa será como segue:
Enter a sentence: Once upon a time
Once upon a time
Enter a sentence: there was a king
Once upon a timethere was a king
Enter a sentence: the king was
Once upon a timethere was a kingthe king was
Enter a sentence:
Once upon a timethere was a kingthe king was |
|