nullptr und Sicherheit bei Nullzeigern
Verwenden Sie nullptr statt NULL oder 0 und schützen Sie sich vor Dereferenzierungen von Nullzeigern.
nullptr und Sicherheit bei Nullzeigern ist eine kostenlose C++ Academy-Lektion auf CoddyKit. Dies ist Lektion 3 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.
Was ist ein Nullzeiger?
Ein Nullzeiger ist ein spezieller Wert, der auf „nichts“ zeigt. Ihn zu dereferenzieren ist undefiniertes Verhalten – normalerweise endet das in einem Segmentation Fault.
nullptr im modernen C++
Seit C++11 steht das Schlüsselwort nullptr für ein typisiertes Nullzeiger-Literal. Bevorzugen Sie es gegenüber NULL oder 0.
int* p1 = nullptr;
int* p2 = NULL; // legacy macro
int* p3 = 0; // legacy literalWarum nullptr?
NULL ist lediglich ein Makro für 0. Es kann die Überladungsauflösung zwischen int und int* erschweren. nullptr hat den eindeutigen Typ std::nullptr_t.
void f(int);
void f(int*);
f(NULL); // calls f(int) -- surprising!
f(nullptr); // calls f(int*) -- correctAuf null prüfen
Zeiger werden implizit in bool konvertiert: Nicht-null ist true, null ist false.
if (p) std::cout << "has value\n";
if (!p) std::cout << "is null\n";
if (p != nullptr) std::cout << "explicit form\n";Immer initialisieren
Nicht initialisierte Zeiger enthalten zufällige Werte und erwecken den Anschein, irgendwohin zu zeigen. Initialisieren Sie sie immer, selbst wenn nur mit nullptr.
int* p; // BAD: undefined contents
int* q = nullptr; // GOODNullzeiger dereferenzieren
Das Lesen oder Schreiben über einen Nullzeiger ist undefiniertes Verhalten. Auf den meisten Desktop-Systemen führt es zu einem Segmentation Fault. Auf eingebetteten Geräten kann es unbemerkt Speicher beschädigen.
Defensive Prüfungen
Prüfen Sie vor der Dereferenzierung in öffentlichen APIs oder wenn der Aufrufer null übergeben könnte.
void process(int* data) {
if (!data) return;
*data *= 2;
}Referenzen statt Zeiger
Wenn null niemals eine gültige Bedeutung hat, verwenden Sie einen Referenzparameter. Der Compiler garantiert, dass die Referenz an etwas gebunden ist.
// Before
void f(Widget* w); // can be null?
// After
void f(Widget& w); // must be a real widgetstd::optional für optionale Werte
C++17 führte std::optional<T> für die Semantik „möglicherweise ein Wert“ ein – in Kontexten ohne Speicherverwaltung klarer als ein nullable Zeiger.
#include <optional>
std::optional<int> find(int x);
if (auto v = find(42)) std::cout << *v;Smart Pointer und null
std::unique_ptr und std::shared_ptr können ebenfalls null sein. Sie werden für Prüfungen in bool konvertiert und mit = nullptr zurückgesetzt.
Fallstrick: Dangling Pointer nach delete
Nach delete p enthält der Zeiger weiterhin die alte Adresse. Setzen Sie ihn zurück: p = nullptr;. Smart Pointer erledigen das automatisch.
Kurzer Test
Welches Nullzeiger-Literal sollten Sie im modernen C++ verwenden?
Zusammenfassung
Verwenden Sie nullptr für Nullzeigerwerte. Initialisieren Sie Zeiger immer. Prüfen Sie vor der Dereferenzierung oder verwenden Sie besser Referenzen und std::optional, wenn null niemals gültig ist.
Häufig gestellte Fragen
Ist die Lektion „nullptr und Sicherheit bei Nullzeigern“ kostenlos?
Ja — der vollständige Text von „nullptr und Sicherheit bei Nullzeigern“ 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 „nullptr und Sicherheit bei Nullzeigern“?
Verwenden Sie nullptr statt NULL oder 0 und schützen Sie sich vor Dereferenzierungen von Nullzeigern. 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 3 von 4.
Wie lange dauert die Lektion „nullptr und Sicherheit bei Nullzeigern“?
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
- Rohe Zeiger und der Adressoperator
- Dereferenzierung und Zeigerarithmetik
- nullptr und Sicherheit bei Nullzeigern
- Wann Zeiger und wann Referenzen?