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:
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:
1#include <iostream>
2
3int main(){
4 int *dyn_array = 0;
5 int groesse;
6
7 std::cout << "Wie gross soll das Datenfeld werden?" << std::endl;
8 std::cin >> groesse;
9 dyn_array = new int[groesse]; // Anfordern eines Datenfeld aus int-Werten
10
11 for (int i = 0; i < groesse; ++i){
12 dyn_array[i] = i; // Wiederholung aus Kapitel "Zeigerarithmetik":
13 // dyn_array[i] entspricht *(dyn_array + i)
14 }
15
16 for (int i = 0; i < groesse; ++i){
17 std::cout << dyn_array[i] << std::endl;
18 }
19
20 delete[] dyn_array; // Das Freigeben des Speichers funktioniert
21 // wie für einzelne Werte
22 dyn_array = 0; // Pointer definiert auf Null zeigen lassen
23}
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.)