Menu
Coddy logo textTech

Speicher freigeben mit 'delete'

Teil des Abschnitts Logik & Ablauf der C++-Journey von Coddy — Lektion 7 von 56.

Wenn Sie Speicher dynamisch mit new reservieren, verschwindet dieser Speicher nicht automatisch, wenn Sie fertig damit sind. Im Gegensatz zu regulären Variablen, die automatisch bereinigt werden, bleibt dynamisch reservierter Speicher so lange in Gebrauch, bis Sie ihn explizit freigeben. Hier wird das Schlüsselwort delete unverzichtbar.

Das Schlüsselwort delete gibt Speicher frei, der zuvor mit new reserviert wurde. Wenn Sie delete verwenden, teilen Sie dem System mit, dass Sie diesen Speicher nicht mehr benötigen und er für andere Zwecke wiederverwendet werden kann:

int* ptr = new int(42);  // Speicher reservieren
// Den Speicher verwenden...
delete ptr;              // Den Speicher freigeben

Die Grundregel der dynamischen Speicherverwaltung ist einfach: für jedes new muss es ein entsprechendes delete geben. Wenn Sie vergessen, dynamisch zugewiesenen Speicher zu löschen, erzeugen Sie ein Speicherleck – Ihr Programm belegt weiterhin Speicher, den es nicht mehr verwendet, was schließlich dazu führen kann, dass Ihrem System der verfügbare Speicher ausgeht.

Nach dem Aufruf von delete auf einen Zeiger wird dieser Zeiger ungültig und sollte nicht mehr verwendet werden. Es ist eine gute Praxis, den Zeiger nach dem Löschen auf nullptr zu setzen, um eine versehentliche Verwendung zu vermeiden.

challenge icon

Aufgabe

Einfach

Erstellen Sie ein Programm, das den vollständigen Lebenszyklus des dynamischen Speichers demonstriert, indem es Speicher mit new allokiert, diesen verwendet und anschließend ordnungsgemäß mit delete freigibt.

Die folgenden Eingaben werden bereitgestellt:

  • Ein Ganzzahlwert (Integer), der im dynamisch allokierten Speicher gespeichert werden soll
  • Ein zweiter Ganzzahlwert, um den gespeicherten Wert zu aktualisieren

Ihr Programm sollte:

  1. new verwenden, um dynamisch Speicher für einen Integer zu allokieren und den Pointer in einer Variable namens dynamicPtr zu speichern
  2. Den ersten Eingabewert dem dynamisch allokierten Speicher unter Verwendung des Dereferenzierungsoperators zuweisen
  3. Den initialen Wert ausgeben, der im dynamisch allokierten Speicher gespeichert ist
  4. Den Wert im dynamisch allokierten Speicher auf den zweiten Eingabewert aktualisieren
  5. Den aktualisierten Wert ausgeben
  6. delete verwenden, um den dynamisch allokierten Speicher freizugeben
  7. Den Pointer nach dem Löschen auf nullptr setzen
  8. Eine Bestätigungsmeldung ausgeben, dass der Speicher erfolgreich freigegeben wurde

Verwenden Sie das folgende exakte Ausgabeformat:

Initial value: [first value]
Updated value: [second value]
Memory freed successfully

Spickzettel

Das Schlüsselwort delete gibt Speicher frei, der zuvor mit new reserviert wurde:

int* ptr = new int(42);  // Speicher reservieren
// Den Speicher verwenden...
delete ptr;              // Den Speicher freigeben

Für jedes new muss es ein entsprechendes delete geben, um Speicherlecks zu vermeiden.

Nach dem Aufruf von delete setzen Sie den Pointer auf nullptr, um die versehentliche Verwendung von ungültigem Speicher zu vermeiden:

delete ptr;
ptr = nullptr;

Probier es selbst

#include <iostream>
using namespace std;

int main() {
    // Eingabewerte lesen
    int firstValue, secondValue;
    cin >> firstValue;
    cin >> secondValue;
    
    // TODO: Schreiben Sie Ihren Code unten
    // 1. Speicher mit new reservieren und in dynamicPtr speichern
    // 2. firstValue dem reservierten Speicher zuweisen
    // 3. Initialwert ausgeben
    // 4. Mit secondValue aktualisieren
    // 5. Aktualisierten Wert ausgeben
    // 6. Speicher löschen und Pointer auf nullptr setzen
    // 7. Bestätigungsmeldung ausgeben
    
    return 0;
}
quiz iconTeste dich selbst

Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.

Alle Lektionen in Logik & Ablauf