C++ Academy · Lektion

nullptr og sikkerhed ved null-pointere

Brug nullptr i stedet for NULL eller 0, og beskyt mod dereferering af null-pointere

Lektion 3 af 413 trin

nullptr og sikkerhed ved null-pointere er en gratis C++ Academy-lektion på CoddyKit. Dette er lektion 3 af 4. Du kan læse alle 3 lektioner i dette læringsspor gratis i deres fulde længde — derefter låser CoddyKit PRO alle lektioner op samt praktiske øvelser med en indbygget kodeeditor og en AI-underviser døgnet rundt. Den er en del af læringsforløbet i C++ Academy, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. C++ Academy-kurset indeholder 4 lektioner i alt.

Hvad er en null-pointer?

En null-pointer er en særlig værdi, der peger på "ingenting". Det er udefineret at dereferere den — normalt medfører det et nedbrud med en segmentation fault.

nullptr i moderne C++

Siden C++11 repræsenterer nøgleordet nullptr en typet null-pointerliteral. Foretræk den frem for NULL eller 0.

int* p1 = nullptr;
int* p2 = NULL;       // legacy macro
int* p3 = 0;          // legacy literal

Hvorfor nullptr?

NULL er blot en makro for 0. Den kan forvirre overload-opløsningen mellem int og int*. nullptr har den unikke type std::nullptr_t.

void f(int);
void f(int*);

f(NULL);      // calls f(int) -- surprising!
f(nullptr);   // calls f(int*) -- correct

Tjekke for null

Pointere konverteres implicit til bool: en pointer, der ikke er null, er true, og en null-pointer er false.

if (p) std::cout << "has value\n";
if (!p) std::cout << "is null\n";
if (p != nullptr) std::cout << "explicit form\n";

Initialisér altid

Uinitialiserede pointere indeholder skrald og lader som om, de peger et sted hen. Initialisér dem altid, også selv om det kun er til nullptr.

int* p;            // BAD: undefined contents
int* q = nullptr;  // GOOD

Dereferering af null

Det er udefineret at læse eller skrive via en null-pointer. På de fleste desktop-systemer medfører det en segfault. På indlejrede enheder kan det ødelægge hukommelsen uden synlige tegn.

Defensive tjek

Tjek før dereferering i offentlige API'er, eller når den kaldende kode kan sende null.

void process(int* data) {
    if (!data) return;
    *data *= 2;
}

Referencer i stedet for pointere

Hvis null aldrig har en meningsfuld betydning, skal du bruge en referenceparameter. Compileren garanterer, at referencen er bundet til noget.

// Before
void f(Widget* w);   // can be null?

// After
void f(Widget& w);   // must be a real widget

std::optional til valgfrie værdier

C++17 tilføjede std::optional<T> til semantik for "måske en værdi" — det er tydeligere end en nullbar pointer i sammenhænge uden hukommelsesallokering.

#include <optional>
std::optional<int> find(int x);
if (auto v = find(42)) std::cout << *v;

Smart pointers og null

std::unique_ptr og std::shared_ptr kan også være null. De konverteres til bool ved tjek og nulstilles med = nullptr.

Faldgrube: hængende pointer efter delete

Efter delete p indeholder pointeren stadig den gamle adresse. Nulstil den: p = nullptr;. Smart pointers gør det automatisk.

Hurtigt tjek

Hvilken null-pointerliteral skal du bruge i moderne C++?

Opsamling

Brug nullptr til null-pointerværdier. Initialisér altid pointere. Tjek før dereferering, eller brug endnu bedre referencer og std::optional, når null aldrig er gyldig.

Gratis at komme i gang

Lær C++ med en AI-underviser — gratis

Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.

Kurser
51
Lektioner
203

Ofte stillede spørgsmål

Er lektionen “nullptr og sikkerhed ved null-pointere” gratis?

Ja — alle 3 lektioner i læringssporet C++ Academy, inklusive “nullptr og sikkerhed ved null-pointere”, kan læses gratis i deres fulde længde her på webstedet. Derefter låser CoddyKit PRO alle lektioner op samt interaktive øvelser med en indbygget kodeeditor og en AI-underviser døgnet rundt. C++ Academy-kurset indeholder 4 lektioner i alt.

Hvad lærer jeg i “nullptr og sikkerhed ved null-pointere”?

Brug nullptr i stedet for NULL eller 0, og beskyt mod dereferering af null-pointere Du øver dig i C++ Academy med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.

Skal jeg have erfaring for at begynde på C++ Academy?

Der kræves ingen tidligere erfaring. C++ Academy på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 3 af 4.

Hvor lang tid tager lektionen “nullptr og sikkerhed ved null-pointere”?

De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.

Kan jeg skrive og køre kode i denne C++ Academy-lektion?

Ja. Alle C++ Academy-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.

Alle lektioner i dette kursus

  1. Rå pointere og adresseoperatoren
  2. Dereferering og pointeraritmetik
  3. nullptr og sikkerhed ved null-pointere
  4. Hvornår bruges pointere kontra referencer
← Tilbage til C++ Academy