C ++ realloc () - Βασική βιβλιοθήκη C ++

Η συνάρτηση realloc () στο C ++ ανακατανέμει ένα μπλοκ μνήμης που είχε εκχωρηθεί στο παρελθόν αλλά δεν είχε ακόμη απελευθερωθεί.

Η συνάρτηση realloc () ανακατανέμει μνήμη που είχε εκχωρηθεί προηγουμένως χρησιμοποιώντας τη συνάρτηση malloc (), calloc () ή realloc () και ωστόσο δεν απελευθερώθηκε χρησιμοποιώντας τη συνάρτηση free ().

Εάν το νέο μέγεθος είναι μηδέν, η τιμή που επιστρέφεται εξαρτάται από την εφαρμογή της βιβλιοθήκης. Μπορεί ή όχι να επιστρέψει έναν μηδενικό δείκτη.

realloc () πρωτότυπο

 void * realloc (void * ptr, size_t new_size);

Η συνάρτηση ορίζεται στο αρχείο κεφαλίδας.

realloc () Παράμετροι

  • ptr: Ένας δείκτης στο μπλοκ μνήμης για ανακατανομή.
  • new_size: Μια μη υπογεγραμμένη ακέραια τιμή που αντιπροσωπεύει το νέο μέγεθος του μπλοκ μνήμης σε byte.

realloc () Επιστροφή τιμή

Η συνάρτηση realloc () επιστρέφει:

  • Ένας δείκτης στην αρχή του ανακατανεμημένου μπλοκ μνήμης.
  • Null δείκτη εάν αποτύχει η κατανομή.

Κατά την ανακατανομή της μνήμης, εάν δεν υπάρχει αρκετή μνήμη, τότε το παλιό μπλοκ μνήμης δεν απελευθερώνεται και επιστρέφεται ένας μηδενικός δείκτης.

Εάν ο παλιός δείκτης (δηλ. Ptr) είναι null, η κλήση realloc () είναι ίδια με την κλήση malloc () λειτουργεί με το νέο μέγεθος ως παράμετρος.

Υπάρχουν δύο πιθανοί τρόποι ανακατανομής της μνήμης.

  1. Επέκταση ή σύμπτυξη του ίδιου μπλοκ : Το μπλοκ μνήμης που δείχνει ο παλιός δείκτης (π.χ. ptr) επεκτείνεται ή συστέλλεται, εάν είναι δυνατόν. Το περιεχόμενο του μπλοκ μνήμης παραμένει αμετάβλητο έως το μικρότερο από τα νέα και παλιά μεγέθη. Εάν η περιοχή επεκταθεί, τα περιεχόμενα του πρόσφατα εκχωρημένου μπλοκ δεν είναι καθορισμένα.
  2. Μετακίνηση σε νέα τοποθεσία : Διατίθεται ένα νέο μπλοκ μνήμης μεγέθους bytes new_size. Σε αυτήν την περίπτωση επίσης, τα περιεχόμενα του μπλοκ μνήμης παραμένουν αμετάβλητα μέχρι τα μικρότερα από τα νέα και παλιά μεγέθη και εάν η μνήμη επεκταθεί, τα περιεχόμενα του πρόσφατα εκχωρημένου μπλοκ είναι απροσδιόριστα.

Παράδειγμα 1: Πώς λειτουργεί η λειτουργία realloc ();

 #include #include using namespace std; int main() ( float *ptr, *new_ptr; ptr = (float*) malloc(5*sizeof(float)); if(ptr==NULL) ( cout << "Memory Allocation Failed"; exit(1); ) /* Initializing memory block */ for (int i=0; i<5; i++) ( ptr(i) = i*1.5; ) /* reallocating memory */ new_ptr = (float*) realloc(ptr, 10*sizeof(float)); if(new_ptr==NULL) ( cout << "Memory Re-allocation Failed"; exit(1); ) /* Initializing re-allocated memory block */ for (int i=5; i<10; i++) ( new_ptr(i) = i*2.5; ) cout << "Printing Values" << endl; for (int i=0; i<10; i++) ( cout << new_ptr(i) << endl; ) free(new_ptr); return 0; )

Όταν εκτελείτε το πρόγραμμα, η έξοδος θα είναι:

 Τιμές εκτύπωσης 0 1,5 3 4,5 6 12,5 15 17,5 20 22,5

Παράδειγμα 2: συνάρτηση realloc () με μηδέν new_size

 #include #include using namespace std; int main() ( int *ptr, *new_ptr; ptr = (int*) malloc(5*sizeof(int)); if(ptr==NULL) ( cout << "Memory Allocation Failed"; exit(1); ) /* Initializing memory block */ for (int i=0; i<5; i++) ( ptr(i) = i; ) /* re-allocating memory with size 0 */ new_ptr = (int*) realloc(ptr, 0); if(new_ptr==NULL) ( cout << "Null Pointer"; ) else ( cout << "Not a Null Pointer"; ) return 0; )

Όταν εκτελείτε το πρόγραμμα, η έξοδος θα είναι:

 Null Pointer

Παράδειγμα 3: λειτουργία realloc () όταν το ptr είναι NULL

 #include #include #include using namespace std; int main() ( char *ptr=NULL, *new_ptr; /* reallocating memory, behaves same as malloc(20*sizeof(char)) */ new_ptr = (char*) realloc(ptr, 50*sizeof(char)); strcpy(new_ptr, "Welcome to Programiz.com"); cout << new_ptr; free(new_ptr); return 0; )

Όταν εκτελείτε το πρόγραμμα, η έξοδος θα είναι:

 Καλώς ορίσατε στο Programiz.com

ενδιαφέροντα άρθρα...