0Pricing
C++ Academy · Lektion

Häufige Speicherfehler

Leaks und Dangling Pointer vermeiden

Häufige Speicherfehler ist eine kostenlose C++ Academy-Lektion auf CoddyKit. Dies ist Lektion 4 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.

Speicherlecks

Ein Speicherleck entsteht, wenn Heap-Speicher reserviert, aber nie freigegeben wird. Das Programm verbraucht weiterhin Speicher, auf den es nicht mehr zugreifen kann.

void leak() {
    int* p = new int(5);
    // missing delete p;  -> leaked
}

Dangling Pointer

Ein dangling pointer zeigt auf Speicher, der bereits freigegeben wurde. Seine Dereferenzierung führt zu undefiniertem Verhalten.

int* p = new int(7);
delete p;
// *p = 3;   // BUG: dangling access

Doppelte Freigabe

delete zweimal für denselben Zeiger aufzurufen, beschädigt den Heap und lässt das Programm häufig abstürzen.

int* p = new int(1);
delete p;
// delete p;   // BUG: double free

Use-After-Free

Das Lesen oder Schreiben über einen Zeiger, nachdem das Objekt gelöscht wurde, ist ein Use-After-Free – eine häufige Ursache von Sicherheitslücken.

Pufferüberlauf

Wenn Sie über das Ende eines Arrays hinaus schreiben, überschreiben Sie nicht zugehörigen Speicher. Bleiben Sie immer innerhalb der Grenzen.

int a[3] = {1, 2, 3};
// a[3] = 99;   // BUG: out of bounds

Nicht passendes delete

delete für eine new[]-Allokation zu verwenden (oder umgekehrt) führt zu undefiniertem Verhalten. Verwenden Sie die passenden Paare.

int* arr = new int[4];
// delete arr;   // BUG: should be delete[] arr;
delete[] arr;     // correct

Nicht initialisierte Zeiger

Ein nicht initialisierter Zeiger enthält einen beliebigen Wert. Initialisieren Sie ihn immer mit einer gültigen Adresse oder mit nullptr.

#include <iostream>

int main() {
    int* p = nullptr;   // safe default
    if (!p) std::cout << "not set\n";
}

Lokale Adressen zurückgeben

Die Adresse einer lokalen Stack-Variablen zurückzugeben, erzeugt sofort einen dangling pointer, da die lokale Variable beim Zurückkehren zerstört wird.

int* bad() {
    int x = 10;
    return &x;   // BUG: x is gone
}

Intelligente Zeiger verhindern Lecks

Das Ersetzen von Besitzern mit rohen Zeigern durch std::unique_ptr verhindert die meisten Speicherlecks und doppelten Freigaben: Die Bereinigung erfolgt automatisch und genau einmal.

#include <iostream>
#include <memory>

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

Werkzeuge zum Aufspüren von Fehlern

Werkzeuge wie AddressSanitizer und Valgrind erkennen Lecks, doppelte Freigaben und Zugriffe außerhalb von Grenzen zur Laufzeit. Machen Sie sie zu einem festen Bestandteil Ihrer Tests.

Vermeiden ist besser als Erkennen

Die beste Lösung besteht darin, vollständig auf rohen Besitz zu verzichten: Verwenden Sie Container wie std::vector und intelligente Zeiger, damit die Bibliothek den Speicher korrekt für Sie verwaltet.

Kurze Überprüfung

Testen Sie Ihr Verständnis von Speicherfehlern.

Zusammenfassung

Sie haben die klassischen Speicherfehler kennengelernt: Lecks, dangling pointer, doppelte Freigaben, Use-After-Free, Pufferüberläufe und nicht passende delete-Aufrufe. Verhindern Sie sie mit intelligenten Zeigern und Containern und erkennen Sie die übrigen mit Sanitizern und Valgrind.

Häufig gestellte Fragen

Ist die Lektion „Häufige Speicherfehler“ kostenlos?

Ja — der vollständige Text von „Häufige Speicherfehler“ 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 „Häufige Speicherfehler“?

Leaks und Dangling Pointer vermeiden 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 4 von 4.

Wie lange dauert die Lektion „Häufige Speicherfehler“?

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