C++-Programmierung/ Speicherverwaltung/ Array-new und Array-delete


Besonders nützlich ist diese Art, Speicher zu reservieren, beim Erstellen dynamischer Datenfelder (engl. arrays) oder bei Listen - denn deren Umfang/Länge ergibt sich häufig erst während des Programmlaufs. Hierzu wird nach der Angabe des Datentyps die Anzahl als int angegeben:

Syntax:
new «Datentyp»[«Menge»];
«Nicht-C++-Code», »optional«

Das Freigeben des Speichers, wenn die Daten nicht mehr benötigt werden, funktioniert für einfache Datenfelder ähnlich wie für einzelne Variablen mit delete[].

Dies kann im Code zum Beispiel so aussehen:

#include <iostream>

int main(){
    int *dyn_array = 0;
    int groesse;

    std::cout  << "Wie gross soll das Datenfeld werden?" << std::endl;
    std::cin >> groesse;
    dyn_array = new int[groesse];            // Anfordern eines Datenfeld aus int-Werten

    for (int i = 0; i < groesse; ++i){
        dyn_array[i] = i;                    // Wiederholung aus Kapitel "Zeigerarithmetik":
                                             //  dyn_array[i] entspricht *(dyn_array + i)
    }

    for (int i = 0; i < groesse; ++i){
        std::cout << dyn_array[i] << std::endl;
    }

    delete[] dyn_array;                      // Das Freigeben des Speichers funktioniert 
                                             // wie für einzelne Werte
    dyn_array = 0;                           // Pointer definiert auf Null zeigen lassen
}

Erwähnenswert ist an dieser Stelle noch, dass sich Arrays beim Anlegen nicht initialisieren lassen. Man kann aber natürlich, wie im Beispiel, nach dem Anlegen das gesamte Array mit Werten belegen, beispielsweise mit einer for-Schleife.

Weiterhin ist zu beachten, dass (bei mehrdimensionalen Arrays) nur die erste Dimension dynamisch erzeugt werden kann. Für weitere Dimensionen können nur Konstanten eingesetzt werden. (Allerdings kann man mit Kniffen jedes mehrdimensionale Array als eindimensionales mit entsprechendem Zugriff darstellen.)