Inhaltsverzeichnis

realloc()

#include <cstdlib>

void * realloc (void *ptr, size_t neue_groesse) 

Vergroessert den mit calloc() oder malloc() reservierten Speicherbereich.

Bei Bedarf wird dazu ein neuer Speicherbereich bereitgestellt. Der alte Speicherinhalt wird soweit wie möglich (bis zum Minimum von alter und neuer Blockgröße) übernommen und der alte Speicherblock freigegeben.

Nicht mehr benötigter Speicher muss mit free() freigegeben werden.

Parameter

ptr Zeiger auf bisheriges dynamisches Feld
anzahl neuer Speicherplatzbedarf in Byte

Ergebnis

Rückgabewert: Zeiger auf dynamischen Speicherblock mit neuer Größe. Kann die Größe nicht geändert werden, liefert die Funktion NULL und der alte Speicherblock ist weiter gültig.

War ptr ein NULL-Zeiger, verhält sich die Funktion wie malloc().

Siehe auch

Operatoren new und delete, calloc(), malloc(), free().

Beispiel

realloc.cpp
#include <cstdlib>
#include <iostream>
 
int main()
{
  using namespace std;
  int anzahl = 1000;
  int *ptr = (int*) malloc(anzahl*sizeof(int));
 
  if (ptr != NULL)
  {
    ptr[0] = 0;
    ptr[anzahl-1] = 999; 
    // ...
    cout << ptr[0] << "..." << ptr[anzahl-1] << '\n';
 
    int *neu = (int*) realloc(ptr, 2*anzahl*sizeof(int));
    if (neu != NULL)
    {
      cout << "Speicherplatz verdoppelt.\n";
      anzahl *= 2;  
      ptr = neu; 
      ptr[anzahl-1] = 1999; 
      // ...  
      cout << ptr[0] << "..." << ptr[anzahl-1] << '\n';
    }
    free(ptr);
  }
  else
  {
    cerr << "Nicht genug Speicher vorhanden.\n";
  } 
}