Λειτουργία realloc() στη βιβλιοθήκη C: Πώς να χρησιμοποιήσετε; Σύνταξη & Παράδειγμα
Τι είναι το realloc();
realloc() είναι μια συνάρτηση της βιβλιοθήκης C για την προσθήκη μεγαλύτερου μεγέθους μνήμης σε ήδη εκχωρημένα μπλοκ μνήμης. Ο σκοπός του realloc στο C είναι να επεκτείνει τα τρέχοντα μπλοκ μνήμης ενώ αφήνει το αρχικό περιεχόμενο ως έχει. Η συνάρτηση realloc() βοηθά στη μείωση του μεγέθους της μνήμης που είχε εκχωρηθεί προηγουμένως από συναρτήσεις malloc ή calloc. Το realloc σημαίνει ανακατανομή μνήμης.
Σύνταξη για το realloc στο C
ptr = realloc (ptr,newsize);
Η παραπάνω δήλωση εκχωρεί έναν νέο χώρο μνήμης με καθορισμένο μέγεθος στη μεταβλητή newsize. Μετά την εκτέλεση του λειτουργία, ο δείκτης θα επιστραφεί στο πρώτο byte του μπλοκ μνήμης. Το νέο μέγεθος μπορεί να είναι μεγαλύτερο ή μικρότερο από την προηγούμενη μνήμη. Δεν μπορούμε να είμαστε σίγουροι ότι εάν το μπλοκ που εκχωρήθηκε πρόσφατα θα δείχνει στην ίδια θέση με αυτή του προηγούμενου μπλοκ μνήμης. Η συνάρτηση realloc στο C θα αντιγράψει όλα τα προηγούμενα δεδομένα στη νέα περιοχή. Διασφαλίζει ότι τα δεδομένα θα παραμείνουν ασφαλή.
Για παράδειγμα:
#include <stdio.h>
int main () {
char *ptr;
ptr = (char *) malloc(10);
strcpy(ptr, "Programming");
printf(" %s, Address = %u\n", ptr, ptr);
ptr = (char *) realloc(ptr, 20); //ptr is reallocated with new size
strcat(ptr, " In 'C'");
printf(" %s, Address = %u\n", ptr, ptr);
free(ptr);
return 0;
}
Πώς να χρησιμοποιήσετε το realloc()
Το παρακάτω πρόγραμμα στο C δείχνει πώς να χρησιμοποιήσετε το realloc στο C για να ανακατανείμετε τη μνήμη.
#include <stdio.h>
#include <stdlib.h>
int main() {
int i, * ptr, sum = 0;
ptr = malloc(100);
if (ptr == NULL) {
printf("Error! memory not allocated.");
exit(0);
}
ptr = realloc(ptr,500);
if(ptr != NULL)
printf("Memory created successfully\n");
return 0;
}
Αποτέλεσμα της ανακατανομής στο παράδειγμα C:
Memory created successfully
Κάθε φορά που η ανακατανομή καταλήγει σε μια ανεπιτυχή λειτουργία, επιστρέφει α μηδενικός δείκτης, και τα προηγούμενα δεδομένα επίσης ελευθερώνονται.
