0Pricing
C++ Academy · Lektion

Heap-Allokation mit new/delete

Dynamischen Speicher verwalten

Heap-Allokation mit new/delete ist eine kostenlose C++ Academy-Lektion auf CoddyKit. Dies ist Lektion 2 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des C++ Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der C++ Academy-Kurs umfasst insgesamt 4 Lektionen.

Dynamischer Speicher mit new

Der Operator new reserviert ein Objekt auf dem Heap (Freispeicher) und gibt einen Zeiger darauf zurück. Heap-Objekte bleiben bestehen, bis Sie sie ausdrücklich freigeben.

#include <iostream>

int main() {
    int* p = new int(42);   // heap allocation
    std::cout << *p << "\n";
    delete p;               // release it
}

Freigeben mit delete

Jedes new muss genau einem delete entsprechen. Wenn Sie es vergessen, entsteht ein Speicherleck; bei einer doppelten Freigabe wird der Heap beschädigt.

#include <iostream>

int main() {
    double* d = new double(3.5);
    std::cout << *d << "\n";
    delete d;     // exactly once
}

Arrays: new[] und delete[]

Verwenden Sie für Arrays new[] und das zugehörige delete[]. new[] mit einfachem delete zu kombinieren, führt zu undefiniertem Verhalten.

#include <iostream>

int main() {
    int* arr = new int[3]{1, 2, 3};
    for (int i = 0; i < 3; ++i) std::cout << arr[i] << "\n";
    delete[] arr;   // note the [ ]
}

Warum den Heap verwenden?

Verwenden Sie den Heap, wenn ein Objekt die Funktion, die es erstellt hat, überleben muss oder wenn seine Größe erst zur Laufzeit bekannt ist. Andernfalls sollten Sie den Stack bevorzugen.

Die Lebensdauer auf dem Heap ist manuell

Anders als der Stack gibt der Heap Objekte nicht automatisch frei. Sie bestimmen genau, wann der Speicher freigegeben wird – und sind dafür verantwortlich.

#include <iostream>

int* makeCounter() {
    return new int(0);   // survives the function
}

int main() {
    int* c = makeCounter();
    std::cout << *c << "\n";
    delete c;
}

Zeiger nach delete auf nullptr setzen

Setzen Sie den Zeiger nach dem Löschen auf nullptr, damit eine versehentliche Wiederverwendung deutlich fehlschlägt, anstatt auf bereits freigegebenen Speicher zuzugreifen.

#include <iostream>

int main() {
    int* p = new int(9);
    delete p;
    p = nullptr;     // now p is safe to check
    if (!p) std::cout << "freed\n";
}

Die Allokation kann fehlschlagen

Wenn der Systemspeicher erschöpft ist, löst new std::bad_alloc aus. Bei sehr großen Allokationen ist das durchaus möglich.

Puffer mit Laufzeitgröße

Heap-Arrays können eine zur Laufzeit berechnete Größe verwenden – etwas, das Stack-Arrays auf portable Weise nicht können.

#include <iostream>

int main() {
    int n = 5;
    int* buf = new int[n];
    for (int i = 0; i < n; ++i) buf[i] = i * i;
    std::cout << buf[4] << "\n";
    delete[] buf;
}

Intelligente Zeiger bevorzugen

Modernes C++ vermeidet rohes new/delete. std::unique_ptr und std::make_unique geben den Speicher automatisch frei, sobald der Zeiger seinen Gültigkeitsbereich verlässt.

#include <iostream>
#include <memory>

int main() {
    auto p = std::make_unique<int>(42);
    std::cout << *p << "\n";
}   // freed automatically

Die Kosten des Heaps

Heap-Allokation ist langsamer als die auf dem Stack: Sie sucht nach einem freien Block und aktualisiert Verwaltungsdaten. Häufige kleine Allokationen können die Leistung beeinträchtigen.

Jedes new zuordnen

Die goldene Regel lautet: Jedes new benötigt ein delete, jedes new[] ein delete[]. Noch besser ist es, intelligente Zeiger damit zu betrauen.

Kurze Überprüfung

Testen Sie Ihr Verständnis der Heap-Allokation.

Zusammenfassung

Sie haben gelernt, mit new/new[] Speicher auf dem Heap zu reservieren und ihn mit delete/delete[] freizugeben. Heap-Objekte überleben ihren Gültigkeitsbereich, benötigen aber eine manuelle Bereinigung. Ordnen Sie jeder Allokation die passende Freigabe zu, setzen Sie freigegebene Zeiger auf null und bevorzugen Sie in modernem Code std::unique_ptr.

Häufig gestellte Fragen

Ist die Lektion „Heap-Allokation mit new/delete“ kostenlos?

Ja — der vollständige Text von „Heap-Allokation mit new/delete“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des C++ Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der C++ Academy-Kurs umfasst insgesamt 4 Lektionen.

Was lerne ich in „Heap-Allokation mit new/delete“?

Dynamischen Speicher verwalten Du übst C++ Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.

Brauche ich Erfahrung, um C++ Academy zu starten?

Keine Vorkenntnisse erforderlich. C++ Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 2 von 4.

Wie lange dauert die Lektion „Heap-Allokation mit new/delete“?

Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.

Kann ich in dieser C++ Academy-Lektion Code schreiben und ausführen?

Ja. Jede C++ Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.

Alle Lektionen in diesem Kurs

  1. Stack-Allokation
  2. Heap-Allokation mit new/delete
  3. Objektlebensdauer
  4. Häufige Speicherfehler
← Zurück zu C++ Academy