Zig Academy · Lekcja

Testing Allocator wykrywa wycieki

Automatycznie wykrywaj błędy pamięci.

Lekcja 3 z 413 kroki

Testing Allocator wykrywa wycieki to bezpłatna lekcja Zig Academy na CoddyKit. To lekcja 3 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Zig Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Zig Academy zawiera 4 lekcji w sumie.

Błędy pamięci są podstępne

Program może przejść wszystkie sprawdzenia wartości, a mimo to wyciekać pamięć, jeśli zapomni ją zwolnić. Zig udostępnia testom narzędzie, które wykrywa właśnie takie problemy.

Poznaj testing.allocator

Wewnątrz testu dostępny jest specjalny alokator std.testing.allocator. Należy używać go wszędzie tam, gdzie kod potrzebuje alokować pamięć na stercie.

const a = std.testing.allocator;

Śledzi każdą alokację

Obiekt testing.allocator zapamiętuje każdy przekazany blok. Po zakończeniu testu sprawdza, czy każdy z nich został zwrócony.

Wyciek powoduje niepowodzenie testu

Jeśli choć jedna alokacja nie zostanie zwolniona, testing.allocator zgłosi wyciek, a test zakończy się niepowodzeniem, wskazując brakujące zwolnienie pamięci.

Alokowanie w teście

O pamięć należy poprosić alokator tak samo jak w rzeczywistym kodzie. W tym przypadku alloc rezerwuje bufor dziesięciu bajtów, który trzeba później zwolnić.

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

Zwalnianie za pomocą defer

Każdą alokację należy połączyć z funkcją defer, która ją zwolni. Sprzątanie jest planowane natychmiast, więc wykona się nawet wtedy, gdy test zakończy się niepowodzeniem w połowie.

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

Pominięcie free pozwala wykryć błąd

Po usunięciu defer test zakończy się niepowodzeniem i zgłosi wyciek. W ten sposób allocator zmienia cichy błąd w wyraźny, możliwy do naprawienia problem.

Wykrywa także podwójne zwolnienia

Ten sam kontrolowany allocator wykrywa również dwukrotne zwolnienie tego samego bloku lub zwolnienie pamięci, której nigdy nie przekazał. Są to klasyczne przyczyny awarii.

Przekazywanie do własnego kodu

Funkcje, które alokują pamięć, przyjmują parametr alokatora. W teście należy przekazać im testing.allocator, aby ich pamięć również była śledzona.

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

Sprzątanie utworzonych danych

Test musi zwolnić wszystko, co zaalokowała funkcja. Należy dodać defer zaraz po wywołaniu, aby zwolnić lub wykonać deinit na zwróconych danych.

defer list.deinit();

Testowanie zwalniania pamięci

Ponieważ wycieki powodują niepowodzenie kompilacji, każdy pomyślnie zakończony test potwierdza, że pamięć została prawidłowo rozliczona. To zapewnia właśnie testing.allocator.

Szybkie sprawdzenie

Uruchamia Pan/Pani test, który alokuje pamięć za pomocą std.testing.allocator, ale nigdy nie zwalnia bufora. Co się stanie?

Podsumowanie

Użył(a) Pan/Pani std.testing.allocator, aby bez dodatkowego kosztu wykrywać wycieki i podwójne zwolnienia pamięci. Należy połączyć każdą alloc z defer free, aby testy pozostały poprawne. ✅

Bezpłatny start

Ucz się Zig dzięki korepetycjom AI — za darmo

Pisz i uruchamiaj kod w przeglądarce, otrzymuj natychmiastową pomoc od korepetytora AI dostępnego 24/7 i kontynuuj naukę w sieci lub w aplikacji.

Kursy
30
Lekcje
120

Często zadawane pytania

Czy lekcja „Testing Allocator wykrywa wycieki” jest bezpłatna?

Tak — pełny tekst „Testing Allocator wykrywa wycieki” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Zig Academy, przejdź na CoddyKit PRO. Kurs Zig Academy zawiera 4 lekcji w sumie.

Co nauczysz się w „Testing Allocator wykrywa wycieki”?

Automatycznie wykrywaj błędy pamięci. Ćwiczysz Zig Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.

Czy potrzebuję doświadczenia, aby zacząć Zig Academy?

Nie wymagamy żadnego doświadczenia. Zig Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 3 z 4.

Ile czasu zajmuje lekcja „Testing Allocator wykrywa wycieki”?

Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.

Czy mogę pisać i uruchamiać kod w tej lekcji Zig Academy?

Tak. Każda lekcja Zig Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.

Wszystkie lekcje w tym kursie

  1. Pisanie bloków test
  2. Asercje za pomocą std.testing
  3. Testing Allocator wykrywa wycieki
  4. Uruchamianie i filtrowanie testów
← Powrót do Zig Academy