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 accessDoppelte 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 freeUse-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 boundsNicht 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; // correctNicht 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, automaticallyWerkzeuge 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
- Stack-Allokation
- Heap-Allokation mit new/delete
- Objektlebensdauer
- Häufige Speicherfehler