Kuidas ennetada Mälu lekked C ++

Mäluleke on kinoprogrammide viga, mis tekib siis, kui programm eraldab rohkem mälu kui see vabastab.Nii, taotluse saab otsa mälu ja põhjustada süsteemi krahhi.Selleks, et vältida mälu lekked, mida pead teadma, kui nad esinevad kõige sagedamini ja kohusetundlik teie kasutada "uue" ja "delete" C ++ ettevõtjad.

, mida te vajate

  • keele oskus C ++
  • C ++ kompilaator
  • siluri ja teiste uurimisasutuste tarkvarasse

juhised

  1. Aru operaator põhitõdesid.C ++ operaator "uue" eraldab hunnik mälu."Delete" operaator vabastab hunnik mälu.Iga "uus" siis tuleks kasutada "delete", nii et teil vabastada sama mälu teil on andnud:

    char * str = new char [30];// Eraldada 30 baiti maja string.

    kustutada [] str;// Clear need 30 baiti ja teha str punkti kuhugi.

  2. ümber mälu ainult siis, kui olete kustutanud.Kui turvakood, str omandab uue aadressi jaotamise teine.Esimene aadress on kadunud pöördumatult, ja nii on 30 baiti, et ta osutas.Nüüd on nad võimatu vaba ja sul on mälu

    leke:

    char * str = new char [30];// Andke tn mälu aadress.

    // kustutada [] str;// Eemalda esimene kommentaar tähistamine seda joont parandada.

    str = new char [60];// Andke tn teise mälu aadressi esimene igaveseks läinud.

    kustutada [] str;// See kustutab 60 baiti, mitte ainult esimese 30

  3. Vaata neid pointer ülesandeid.Iga dünaamiline muutuja (eraldatud mälu hunnik) tuleb seostada pointer.Kui dünaamiline muutuja muutub lahutada selle osuti (s), osutub võimatuks kustutada.Jällegi, see põhjustab mäluleke:

    char str1 = new char [30];

    char
    str2 = new char [40];

    strcpy (str1, "Mälulekete");

    str2 = str1;// Bad!Nüüd 40 baiti on võimatu tasuta.

    kustutada [] str2;// See kustutab 30 baiti.

    kustutada [] str1;// Võimalik juurdepääsu rikkumise.Mis katastroof!

  4. Ole ettevaatlik kohalike suunanäitajaks.Pointer teil deklareerida funktsioon on eraldatud virnas, kuid dünaamiline muutuja osutab ta on eraldatud hunnik.Kui te ei kustuta, see jääb püsima ka peale programmi väljub funktsiooni:

    kehtetuks Leak (int x) {

    char * p = new char [x];

    // kustutada [] p;// Eemalda esimene kommentaar märgistus parandada.

    }

  5. Pöörake tähelepanu kandiliste sulgudega pärast "kustutada."Kasuta "kustutada" enda poolt vabalt ühe objekti.Kasuta "kustutada" [] nurksulgudes vaba hunnik massiivi.Ära tee midagi sellist:

    char üks = new char;

    kustutada [] üks;// Vale

    char
    palju = new char [30];

    kustutada mitu;// Vale!

Tips & amp;Hoiatused

  • Vältige segamist C ja C ++.Kasutage uusi ja kustutada, ega kasuta malloc () ja tasuta ().Mitte mingil juhul kasutada uusi tasuta () või malloc () Delete.

Resources

  • Cplusplus.com pakub täielikku C ++ õpetused.
  • Bruceeckel.com pakub kahte Internetis raamatuid C ++.
  • C / C ++ Kasutajad Journal on aidata C ++ arendajad.
478
0
1
C / C ++ Programming