Ero sivun ”Muistivuoto” versioiden välillä

Wikipediasta
Siirry navigaatioon Siirry hakuun
[arvioimaton versio][arvioimaton versio]
Poistettu sisältö Lisätty sisältö
Thijs!bot (keskustelu | muokkaukset)
p Botti lisäsi: nl:Geheugenlek
FlaBot (keskustelu | muokkaukset)
p Botti lisäsi: it:Memory leak
Rivi 30: Rivi 30:
[[en:Memory leak]]
[[en:Memory leak]]
[[es:Fuga de memoria (informática)]]
[[es:Fuga de memoria (informática)]]
[[it:Memory leak]]
[[he:דליפת זיכרון]]
[[he:דליפת זיכרון]]
[[lt:Atminties nutekėjimas]]
[[lt:Atminties nutekėjimas]]

Versio 5. kesäkuuta 2006 kello 05.07

Muistivuoto on ohjelmoinnin tyypillisimpiä virheitä. Tällä tarkoitetaan sitä, että ohjelmapätkä ei vapauta kaikkea varaamaansa muistia. Kun pätkää suoritetaan ohjelmassa monia kertoja, ohjelma yleensä kaatuu tietokoneen jonkun resurssin loputtua. Joissakin ohjelmointikielissä, kuten Javassa, on automaattinen roskienkerääjä joka pyrkii vapauttamaan järjestelmän resursseja ohjelman käyttöön. Tällaista roskienkerääjää ei ole kuitenkaan esimerkiksi C:ssä ja C++:ssa.

Ongelman välttäminen

Muistivuodon havaitsemista varten voidaan tehdä testiohjelma, joka suorittaa jotakin funktiota useita kertoja peräkkäin. Tällöin saatetaan havaita koodista ongelmakohta, jos ohjelma kaatuu koko ajan samassa suoritusvaiheessa.

Yksinkertainen C-kielinen esimerkki

Tämä ohjelma havainnollistaa muistivuotoa.

int main(void)
{
   char *string1 = malloc(sizeof(char)*50);
   char *string2 = malloc(sizeof(char)*50);
   scanf("%s", string2);
   string1 = string2; 
             /* Tässä string1:n varaama muisti kadotetaan.
             *  Se ei osoita mihinkään muistialueeseen,
             *  joten sitä ei voida eksplisiittisesti vapauttaa.
             */
   free(string2); /* Tämä toimii. */
   free(string1); /* Muistivuoto! Yritetään vapauttaa muistia 
                     joka on jo kertaalleen vapautettu. */
   return 0;

}