Miten estää muistivuotokuvioista C ++

muistivuoto on eräänlainen ohjelma vika, joka tapahtuu, kun ohjelma jakaa enemmän muistia kuin se vapauttaa.Näin sovellus voi loppuu muisti ja aiheuttaa järjestelmän kaatumisen.Estää muistivuotoja, sinun täytyy tietää, milloin niitä esiintyy yleisimmin ja olla tunnollinen teidän käyttöön "uuden" ja "Poista" C ++ toimijoille.

mitä tarvitset

  • Osaamista C ++
  • C ++ kääntäjä
  • Debugger ja muiden tutkintatoimien ohjelmistotyökaluja

Ohjeet

  1. Ymmärtää toimija perusasiat.C ++ operaattori "uusi" jakaa kasaan muistia."Delete" operaattori vapauttaa keon muistia.Jokaista "uusi", sinun tulisi käyttää "Poista", jotta voit vapauttaa saman muistin varattu:

    char * str = new char [30];// Jakamaan 30 tavua talon merkkijono.

    poistaa [] str;// Tyhjennä nämä 30 tavua ja tehdä str kohta mihinkään.

  2. kohdentaa muisti vain, jos olet poistanut.Vuonna alla oleva koodi, str hankkii uuden osoitteen toisen jako.Ensimmäinen osoite on menetetty peruuttamattomasti, ja niin ovat 30

    tavua, että se osoitti.Nyt he mahdoton vapaa, ja sinulla on muisti vuoto:

    char * str = new char [30];// Anna str muisti osoite.

    // poistaa [] str;// Poista ensimmäinen kommentti merkintä tämän linjan korjata.

    str = new char [60];// Give str toiseen muistiin osoitteen ensimmäinen poissa ikuisesti.

    poistaa [] str;// Tämä poistaa 60 tavua, ei vain ensimmäinen 30

  3. Katsomaan osoitinta tehtäviä.Jokainen dynaaminen muuttuja (jaettu muisti kasaan) on liittyvän osoittimen.Kun dynaaminen muuttuja tulee erottaa sen osoitin (s), on mahdotonta poistaa.Jälleen, tämä johtaa muistivuodon:

    char str1 = uusi char [30];

    char
    str2 = uusi char [40];

    strcpy (str1, "Memory vuoto");

    str2 = str1;// Bad!Nyt 40 tavua on mahdotonta vapauttaa.

    poistaa [] str2;// Tämä poistaa 30 tavua.

    poistaa [] str1;// Mahdollinen pääsy rikkomisesta.Mikä katastrofi!

  4. Varo paikallisten viitteitä.Osoitin sinua julistaa toiminto on varattu pinoon, mutta dynaaminen muuttuja se osoittaa jaetaan kasaan.Jos et poista sitä, se jatkuu kun ohjelma poistuu toiminto:

    mitätöidä vuoto (int x) {

    char * p = uusi char [x];

    // poistaa [] p;// Poista ensimmäinen kommentti merkintä korjata.

    }

  5. Kiinnitä huomiota hakasuluilla jälkeen "poistaa."Käytä "delete" itse vapauttaa yhden esineen.Käytä "poista" [] hakasulkeilla vapauttaa kasaan array.Älä tee jotain tällaista:

    char yksi = new char;

    poistaa [] oni;// Väärä

    char
    monet = uusi char [30];

    poistaa useita;// Väärin!

Vinkkejä & amp;Varoitukset

  • Vältä sekoittamasta C- ja C ++.Käytä uusia ja poistaa tai käytä malloc () ja free ().Missään tapauksessa käyttää uusia ilmaisella () tai malloc () Delete.

Resurssit

  • Cplusplus.com tarjoaa täydellisen C ++: opetusohjelmia.
  • Bruceeckel.com tarjoaa kaksi verkossa kirjoja C ++.
  • C / C ++ Käyttäjiä lehti on auttaa C ++ kehittäjille.
222
0
1
C / C ++ Ohjelmointi