Rekisteröitymätön käyttäjä
Ero sivun ”Valgrind” versioiden välillä
Siirry navigaatioon
Siirry hakuun
→tool=memcheck
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. |