C ++ realloc () - C ++ Standardbibliothek

Die Funktion realloc () in C ++ ordnet einen Speicherblock neu zu, der zuvor zugewiesen, aber noch nicht freigegeben wurde.

Die Funktion realloc () ordnet Speicher neu zu, der zuvor mit der Funktion malloc (), calloc () oder realloc () zugewiesen und mit der Funktion free () noch nicht freigegeben wurde.

Wenn die neue Größe Null ist, hängt der zurückgegebene Wert von der Implementierung der Bibliothek ab. Es kann einen Nullzeiger zurückgeben oder nicht.

realloc () Prototyp

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

Die Funktion ist in der Header-Datei definiert.

realloc () Parameter

  • ptr: Ein Zeiger auf den Speicherblock, der neu zugewiesen werden soll.
  • new_size: Ein vorzeichenloser Integralwert, der die neue Größe des Speicherblocks in Bytes darstellt.

realloc () Rückgabewert

Die Funktion realloc () gibt Folgendes zurück:

  • Ein Zeiger auf den Anfang des neu zugewiesenen Speicherblocks.
  • Nullzeiger, wenn die Zuordnung fehlschlägt.

Wenn bei der Neuzuweisung von Speicher nicht genügend Speicher vorhanden ist, wird der alte Speicherblock nicht freigegeben und ein Nullzeiger zurückgegeben.

Wenn der alte Zeiger (dh ptr) null ist, entspricht der Aufruf von realloc () dem Aufruf der Funktion malloc () mit der neuen Größe als Parameter.

Es gibt zwei Möglichkeiten, Speicher neu zuzuweisen.

  1. Den gleichen Block erweitern oder verkleinern: Der Speicherblock, auf den der alte Zeiger (dh ptr) zeigt, wird nach Möglichkeit erweitert oder verkleinert. Der Inhalt des Speicherblocks bleibt bis auf die kleinere der neuen und alten Größen unverändert. Wenn der Bereich erweitert wird, ist der Inhalt des neu zugewiesenen Blocks undefiniert.
  2. Umzug an neuen Speicherort : Ein neuer Speicherblock mit der Größe new_size bytes wird zugewiesen. Auch in diesem Fall bleibt der Inhalt des Speicherblocks bis zur kleineren der neuen und alten Größe unverändert, und wenn der Speicher erweitert wird, ist der Inhalt des neu zugewiesenen Blocks undefiniert.

Beispiel 1: Wie funktioniert die Funktion 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; )

Wenn Sie das Programm ausführen, lautet die Ausgabe wie folgt:

 Druckwerte 0 1,5 3 4,5 6 12,5 15 17,5 20 22,5

Beispiel 2: Funktion realloc () mit new_size zero

 #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; )

Wenn Sie das Programm ausführen, lautet die Ausgabe wie folgt:

 Null Zeiger

Beispiel 3: Funktion realloc (), wenn ptr NULL ist

 #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; )

Wenn Sie das Programm ausführen, lautet die Ausgabe wie folgt:

 Willkommen bei Programiz.com

Interessante Beiträge...