Het opnieuw toewijzen van Geheugen
Het is mogelijk vaak terwijl u programmeert dat u geheugen wilt opnieuw toewijzen. Dit wordt gedaan met de reallocfunctie. De reallocfunctie neemt twee parameters, het basisadres van geheugen u wilt resize, en de hoeveelheid ruimte u en winst een wijzer aan het basisadres wilt reserveren.
Veronderstel wij ruimte voor een geroepen wijzer msg hebben gereserveerd en wij ruimte aan de hoeveelheid ruimte willen opnieuw toewijzen het reeds opneemt, plus de lengte van een ander koord toen konden wij het volgende gebruiken.
msg = (char *)realloc(msg, (strlen(msg) + strlen(buffer) + 1)*sizeof(char));
Het volgende programma illustreert het gebruik van malloc, realloc en vrij. De gebruiker gaat een reeks koorden in die samen bij worden aangesloten. Het programma houdt op lezend koorden wanneer een leeg koord is ingegaan.
#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;
}
De output van het programma zal als volgt zijn:
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 |
|