Zig Academy · Oppitunti

Testing Allocator löytää muistivuodot

Havaitkaa muistivirheet automaattisesti.

Oppitunti 3/413 vaihetta

Testing Allocator löytää muistivuodot on ilmainen Zig Academy-oppitunti CoddyKitissä. Tämä on oppitunti 3/4. Voit lukea koko oppitunnin alta ilmaiseksi ja harjoitella sen jälkeen käytännössä selaimessa sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla. Oppitunti kuuluu Zig Academy-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. Zig Academy-kurssilla on yhteensä 4 oppituntia.

Muistivirheet ovat salakavalia

Ohjelma voi läpäistä kaikki arvojen tarkistukset ja silti vuotaa muistia, jos vapautus unohtuu. Zig tarjoaa testeille työkalun, joka havaitsee juuri tämän.

Tutustu testing.allocatoriin

Testin sisällä käytettävissä on erityinen allokaattori osoitteessa std.testing.allocator. Käytä sitä kaikkialla, missä koodisi tarvitsee kekomuistia.

const a = std.testing.allocator;

Se seuraa jokaista allokaatiota

testing.allocator muistaa jokaisen luovuttamansa muistilohkon. Testin päättyessä se tarkistaa, palautettiinko jokainen niistä.

Muistivuoto epäonnistuttaa testin

Jos yksikin allokaatio jää vapauttamatta, testing.allocator ilmoittaa muistivuodosta ja testi epäonnistuu osoittaen puuttuvan vapautuksen.

Allokoi testissä

Pyydä allokaattorilta muistia aivan kuten oikeassa koodissa. Tässä alloc varaa kymmenen tavun puskurin, joka on myöhemmin vapautettava.

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

Vapauta deferillä

Yhdistä jokaiseen allokaatioon defer, joka vapauttaa sen. Siivous ajoitetaan heti, joten se suoritetaan, vaikka testi epäonnistuisi kesken kaiken.

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

Unohda free ja löydä virhe

Kun poistat deferin, testi epäonnistuu muistivuotoilmoitukseen. Näin allocator muuttaa hiljaisen virheen näkyväksi ja korjattavaksi epäonnistumiseksi.

Se havaitsee myös kaksoisvapautukset

Sama tarkistava allocator havaitsee myös saman lohkon vapauttamisen kahdesti tai sellaisen muistin vapauttamisen, jota se ei ole koskaan luovuttanut. Nämä ovat tyypillisiä kaatumisten syitä.

Välitä se koodillesi

Allokoivat funktiot ottavat allokaattorin parametrina. Välitä testissä niille testing.allocator, jotta myös niiden käyttämää muistia seurataan.

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

Siivoa rakentamasi data

Testin on vapautettava kaikki, minkä funktiosi allokoi. Lisää defer heti kutsun jälkeen vapauttamaan palautettu data tai kutsumaan sen deinit-funktiota.

defer list.deinit();

Muistin vapauttamisen testaaminen

Koska muistivuodot epäonnistuttavat koontiversion, jokainen läpäisty testi todistaa muistin vapautusten olevan tasapainossa. Tämä varmuus on testing.allocator-toiminnon ansiota.

Pikacheck

Suoritat testin, joka allokoi muistia std.testing.allocatorilla mutta ei koskaan vapauta puskuria. Mitä tapahtuu?

Kertaus

Käytit std.testing.allocator-toimintoa muistivuotojen ja kaksoisvapautusten havaitsemiseen ilmaiseksi. Yhdistä jokaiseen alloc-kutsuun defer free, niin testisi pysyvät siisteinä. ✅

Aloita maksutta

Opi Zig tekoälytuutorin avulla — ilmaiseksi

Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.

Kurssit
30
Oppitunnit
120

Usein kysytyt kysymykset

Onko oppitunti ”Testing Allocator löytää muistivuodot” ilmainen?

Kyllä – oppitunnin ”Testing Allocator löytää muistivuodot” koko tekstin voi lukea täällä verkossa ilmaiseksi. Jos haluat harjoitella interaktiivisesti sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla sekä avata koko Zig Academy-kurssin, päivitä CoddyKit PROhon. Zig Academy-kurssilla on yhteensä 4 oppituntia.

Mitä opin oppitunnilla ”Testing Allocator löytää muistivuodot”?

Havaitkaa muistivirheet automaattisesti. Harjoittelet Zig Academy-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.

Tarvitsenko kokemusta aloittaakseni Zig Academy-opiskelun?

Aiempi kokemus ei ole tarpeen. CoddyKitin Zig Academy-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 3/4.

Kuinka kauan ”Testing Allocator löytää muistivuodot”-oppitunnin suorittaminen kestää?

Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.

Voinko kirjoittaa ja suorittaa koodia tällä Zig Academy-oppitunnilla?

Kyllä. Jokainen Zig Academy-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.

Kaikki tämän kurssin oppitunnit

  1. test-lohkojen kirjoittaminen
  2. Väitteet std.testing-kirjastolla
  3. Testing Allocator löytää muistivuodot
  4. Testien suorittaminen ja suodattaminen
← Takaisin: Zig Academy