Ero sivun ”Valgrind” versioiden välillä

Siirry navigaatioon Siirry hakuun
2 068 merkkiä lisätty ,  17. huhtikuuta 2007
Ei muokkausyhteenvetoa
Rivi 34: Rivi 34:


Tässä vikana voi olla esimerkiksi unohtunut = NULL -sijoitus olemattomalle oliolle, kun olion ja NULL:n vertailua käytetään ehtona olion käsittelylle. Kannattaa kuitenkin välttää logiikkavirheiden peittämistä mielivaltaisella alustamisella!
Tässä vikana voi olla esimerkiksi unohtunut = NULL -sijoitus olemattomalle oliolle, kun olion ja NULL:n vertailua käytetään ehtona olion käsittelylle. Kannattaa kuitenkin välttää logiikkavirheiden peittämistä mielivaltaisella alustamisella!
===yhteenveto ohjelman muistinkäytöstä===
==8843== ERROR SUMMARY: 4 errors from 4 contexts (suppressed: 7 from 1)
==8843== malloc/free: in use at exit: 4 bytes in 1 blocks.
==8843== malloc/free: 1 allocs, 0 frees, 4 bytes allocated.
==8843== For counts of detected errors, rerun with: -v
==8843== searching for pointers to 1 not-freed blocks.
==8843== checked 53,100 bytes.
Käyttämällä valitsinta --leak-check=full saadaan tietoa menetetystä muistista:
==8843== 4 bytes in 1 blocks are definitely lost in loss record 1 of 1
==8843==    at 0x4021628: malloc (in /usr/lib/valgrind/x86-linux/vgpreload_memcheck.so)
==8843==    by 0x80483F1: main (testi.c:7)
Tämä kertoo, että kadotettu 4 tavun kokoinen 1 muistialue (block) varattiin käyttöön testi.c:n rivillä 7. Monimutkaisemmissa tilanteissa tulostuu koko kutsupino, joka aiheutti muistinvaraamisen. Se on kuitenkin tulkittavissa, kuten aiemmin esitettiin.
==8843== LEAK SUMMARY:
==8843==    definitely lost: 4 bytes in 1 blocks.
==8843==      possibly lost: 0 bytes in 0 blocks.
==8843==    still reachable: 0 bytes in 0 blocks.
==8843==        suppressed: 0 bytes in 0 blocks.
==8843== Reachable blocks (those to which a pointer was found) are not shown.
==8843== To see them, rerun with: --show-reachable=yes
Tämä kertoo yhteenvedon hukatusta muistista - hyvässä C-kielisessä ohjelmassa tyypillisesti kaikki luvut tässä ovat nollia.
"definitely lost" kertoo, että muistialueen käsittely voidaan varmasti tulkita muistivuodoksi.
"possibly lost" kertoo, että muistialueen käsittely on luultavasti tulkita muistivuodoksi.
"still reachable" kertoo, että varattuun muistialueeseen on säilytetti viittaus ohjelman loppuun asti, mutta sitä ei vapauteta ennen ohjelma päättymistä. Tunnetusti C++:n standardikirjastojen templaattisäilöt eivät vapauta muistia välttämättä käskettäessäkään, vaan säilyttävät varauksen, jotta alue voitaisiin ottaa tarvittaessa uudelleen käyttöön. Tästä ei siis tarvitse välttämättä C++-ohjelmissa huolestua.
Rekisteröitymätön käyttäjä

Navigointivalikko