Reasignación de memoria
Es posible muchas veces mientras que estás programando que deseas reasignar memoria. Esto se hace con la función del realloc. La función del realloc toma dos parámetros, la dirección baja de la memoria que deseas volver a clasificar según el tamaño, y la cantidad de espacio deseas reservar y las vueltas un indicador a la dirección baja.
Suponer que hemos reservado el espacio para un indicador llamado los msg y deseamos reasignar el espacio a la cantidad de espacio que toma ya, más la longitud de otra secuencia entonces podríamos utilizar el siguiente.
msg = (char *)realloc(msg, (strlen(msg) + strlen(buffer) + 1)*sizeof(char));
El programa siguiente ilustra el uso del malloc, realloc y lo libera. El usuario entra en una serie de secuencias que se ensamblen juntas. El programa para secuencias de la lectura cuando se entra una secuencia vacía.
#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;
}
La salida del programa será como sigue:
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 |
|