Wie gibt man den Speicher nach folgender Deklaration eines dynamischen Arrays wieder frei (C++) ?

... komplette Frage anzeigen

3 Antworten

Die Antwort von "ralphdieter" ist vermutlich genau das, was du wissen willst, aber um Speicherlecks zu vermeiden, nimm lieber Vektoren oder packe deinen allozierten Speicher wenigstens in einen Container für Pointer (shared_ptr oder unique_ptr)! :)

Beispiel:

#include <vector>

vector<vector<int>> spielfeld(hoehe);
for (auto &reihe : spielfeld) {
reihe.resize(breite);
}

Danach sind erstens alle Felder ordentlich mit 0 initialisiert, und du kannst über spielfeld[y][x] ganz normal und völlig ohne Laufzeit-Overhead auf einzelne "Felder" zugreifen.

Um ein Aufräumen des Speichers musst du dich nicht mehr kümmern, denn das geschieht automatisch. :)

Antwort bewerten Vielen Dank für Deine Bewertung

So räumst Du auf:

for (int i=0; i<hoehe; i++)
delete[] Spielfeld[i];


delete[] Spielfeld;

Spielfeld = 0; // zur Sicherheit


Antwort bewerten Vielen Dank für Deine Bewertung
Kommentar von TeeTier
28.04.2016, 18:06

Mit der letzten Zeile bin ich nicht einverstanden, aber das ist ein komplexes Thema auf das immer ellenlange Diskussionen folgen. Ich glaube, hier scheiden sich die Geister. :)

Ansonsten eine gute Antwort! :)

1

Bei java macht das der GC, sobald keine Referenz mehr auf den Speicher zeigt. 

und:

// Deklaration des Dynamischen 2-D Arrays
Spielfeld s = new Spielfeld( hoehe);
for (int i=0; i<hoehe; i++)
{
s[i] = new int[breite];
}

So würde es auch eher compilieren :)

Antwort bewerten Vielen Dank für Deine Bewertung

Was möchtest Du wissen?