Zig Academy · Lektion

Test-allokatoren finder leaks

Find hukommelsesfejl automatisk.

Lektion 3 af 413 trin

Test-allokatoren finder leaks er en gratis Zig Academy-lektion på CoddyKit. Dette er lektion 3 af 4. Du kan læse hele lektionen gratis nedenfor — og derefter øve dig praktisk i browseren med en indbygget kodeeditor og en AI-vejleder, der er tilgængelig døgnet rundt. Den er en del af læringsforløbet i Zig Academy, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. Zig Academy-kurset indeholder 4 lektioner i alt.

Hukommelsesfejl er snedige

Et program kan bestå alle værdikontroller og stadig lække hukommelse, fordi den ikke bliver frigivet. Zig giver tests et værktøj til præcis at opdage det.

Mød testing.allocator

Inde i en test får du en særlig allokator via std.testing.allocator. Brug den overalt, hvor din kode skal allokere heap-hukommelse.

const a = std.testing.allocator;

Den holder styr på hver allokering

testing.allocator husker hver blok, den udleverer. Når testen slutter, kontrollerer den, om hver blok er blevet leveret tilbage.

En lækage får testen til at mislykkes

Hvis bare én allokering aldrig frigives, rapporterer testing.allocator en lækage, og testen mislykkes. Rapporten peger på det manglende free.

Allokér i en test

Bed allokatoren om hukommelse ligesom i rigtig kode. Her reserverer alloc en buffer på ti bytes, som du skal frigive senere.

const buf = try a.alloc(u8, 10);

Frigiv med defer

Par hver allokering med en defer, der frigiver den. Oprydningen planlægges med det samme, så den også udføres, hvis testen mislykkes undervejs.

const buf = try a.alloc(u8, 10);
defer a.free(buf);

Glem free, og find fejlen

Fjern den defer, så mislykkes testen med en lækagerapport. På den måde gør allocator en skjult fejl til en tydelig fejl, der kan rettes.

Den opdager også dobbelt frigivelse

Den samme kontrollerede allocator opdager, hvis du frigiver den samme blok to gange eller frigiver hukommelse, som den aldrig har givet dig. Begge dele er klassiske årsager til nedbrud.

Giv den videre til din kode

Funktioner, der allokerer, tager en allokator som parameter. I en test giver du dem testing.allocator, så deres hukommelse også bliver sporet.

const list = try buildList(std.testing.allocator);

Ryd op efter det, du opretter

Testen skal frigive alt, hvad din funktion har allokeret. Tilføj en defer lige efter kaldet for at frigive eller deinitiere de returnerede data.

defer list.deinit();

Test af frigivelse af hukommelse

Fordi lækager får bygningen til at mislykkes, beviser hver bestået test, at dens hukommelse er blevet frigivet korrekt. Den sikkerhed er særlig for testing.allocator.

Hurtig kontrol

Du kører en test, der allokerer med std.testing.allocator, men aldrig frigiver bufferen. Hvad sker der?

Opsummering

Du brugte std.testing.allocator til gratis at opdage lækager og dobbelt frigivelse. Par hver alloc med en defer free, så dine tests forbliver rene. ✅

Gratis at komme i gang

Lær Zig 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
30
Lektioner
120

Ofte stillede spørgsmål

Er lektionen “Test-allokatoren finder leaks” gratis?

Ja — hele teksten til “Test-allokatoren finder leaks” kan læses gratis her på nettet. Hvis du vil øve dig interaktivt med en indbygget kodeeditor og en AI-vejleder døgnet rundt og få adgang til resten af Zig Academy-kurset, skal du opgradere til CoddyKit PRO. Zig Academy-kurset indeholder 4 lektioner i alt.

Hvad lærer jeg i “Test-allokatoren finder leaks”?

Find hukommelsesfejl automatisk. Du øver dig i Zig 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å Zig Academy?

Der kræves ingen tidligere erfaring. Zig 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 “Test-allokatoren finder leaks”?

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 Zig Academy-lektion?

Ja. Alle Zig 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. Skriv test-blokke
  2. Påstande med std.testing
  3. Test-allokatoren finder leaks
  4. Kørsel og filtrering af tests
← Tilbage til Zig Academy