Réappropriation de la mémoire
Il est possible beaucoup de fois tandis que vous programmez que vous voulez réapproprier la mémoire. Ceci est fait avec la fonction de realloc. La fonction de realloc prend deux paramètres, l'adresse de base de la mémoire que vous voulez remettre à la côte, et la place vous voulez réserver et des retours un indicateur à l'adresse de base.
Supposer que nous avons réservé l'espace pour un indicateur appelé les msg et nous voulons réapproprier l'espace à la place qu'elle prend déjà, plus la longueur d'une autre corde alors nous pourrions employer le suivant.
msg = (char *)realloc(msg, (strlen(msg) + strlen(buffer) + 1)*sizeof(char));
Le programme suivant illustre l'utilisation du malloc, realloc et la libère. L'utilisateur entre dans une série de cordes qui sont jointes ensemble. Le programme arrête des cordes de lecture quand une corde vide est entrée.
#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;
}
Le rendement du programme sera comme suit :
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 |
|