#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.
ptr | Zeiger auf bisheriges dynamisches Feld |
anzahl | neuer Speicherplatzbedarf in Byte |
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().
Operatoren new und delete, calloc(), malloc(), free().
#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"; } }