Αναδιανομή της μνήμης
Είναι δυνατό πολλές φορές ενώ προγραμματίζετε ότι θέλετε να αναδιανείμετε τη μνήμη. Αυτό γίνεται με τη λειτουργία realloc. Η λειτουργία realloc παίρνει δύο παραμέτρους, η διεύθυνση βάσεων της μνήμης θέλετε να επαναταξινομήσετε, και το ποσό διαστήματος που θέλετε να διατηρήσετε και επιστροφές έναν δείκτη στη διεύθυνση βάσεων.
Υποθέστε έχουμε διατηρήσει το διάστημα για έναν δείκτη αποκαλούμενο msg και θέλουμε να αναδιανείμουμε το διάστημα στο ποσό διαστήματος απορροφεί ήδη, συν το μήκος μιας άλλης σειράς έπειτα θα μπορούσαμε να χρησιμοποιήσουμε τον ακόλουθο.
msg = (char *)realloc(msg, (strlen(msg) + strlen(buffer) + 1)*sizeof(char));
Το ακόλουθο πρόγραμμα επεξηγεί τη χρήση του malloc, realloc και ελεύθερος. Ο χρήστης εισάγει μια σειρά σειρών που ενώνονται από κοινού. Το πρόγραμμα σταματά τις σειρές όταν εισάγεται μια κενή σειρά.
#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;
}
Η παραγωγή του προγράμματος θα είναι η ακόλουθη:
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 |
|