Sådan forhindrer hukommelseslækager i C ++

En hukommelsesfejl er en form for programmering fejl, der opstår, når et program allokerer mere hukommelse, end den frigør.På denne måde kan en ansøgning løbe tør for hukommelse og få systemet til at gå ned.For at forhindre memory leaks, du behøver at vide, når de forekommer hyppigst og være samvittighedsfuld med din brug af de "nye" og "Slet" C ++ operatører.

hvad du har brug

  • Færdigheder i C ++
  • C ++ compiler
  • Debugger og andre undersøgende softwareværktøjer

Instruktioner

  1. Forstå operatøren basics.C ++ operatør "nye" allokerer bunke hukommelse."Slet" operatør frigør bunke hukommelse.For hver "ny", skal du bruge en "slet", så du frigøre den samme hukommelse, du tildelte:

    char * str = ny char [30];// Afsætte 30 bytes til at huse en streng.

    slet [] str;// Ryd disse 30 bytes og gøre str punkt ingen steder.

  2. omfordele hukommelse, hvis du har slettet.I koden nedenfor, str erhverver en ny adresse med anden tildeling.Den første adresse er tabt uige

    nkaldeligt, og så er de 30 bytes, at det pegede på.Nu er de umulige at gratis, og du har en hukommelsesfejl:

    char * str = ny char [30];// Give str en lageradresse.

    // slette [str];// Tag den første kommentar mærkning i denne linje for at korrigere.

    str = ny char [60];// Give str anden hukommelse-adresse med den første væk for evigt.

    slet [] str;// Dette sletter de 60 bytes, ikke kun den første 30.

  3. Watch disse pointer opgaver.Hver dynamisk variabel (allokerede hukommelse på heapen) skal være forbundet med en pegepind.Når en dynamisk variabel bliver dissocieret fra dets pointer (s), bliver det umuligt at slette.Igen, dette resulterer i en hukommelsesfejl:

    char str1 = ny char [30];

    char
    str2 = ny char [40];

    strcpy (str1, "Memory lækage")

    str2 = str1;// Bad!Nu 40 bytes er umulige at slippe.

    slet [] str2;// Dette sletter de 30 bytes.

    slet [] str1;// Mulig adgang overtrædelse.Hvad en katastrofe!

  4. Vær forsigtig med lokale pointere.En pointer du erklærer i en funktion er allokeret på stakken, men den dynamiske variabel den peger på fordeles på bunke.Hvis du ikke sletter den, vil den vare ved efter programmet afsluttes fra den funktion:

    ugyldiggøre Leak (int x) {

    char * p = ny char [x];

    // slet [] p;// Tag den første kommentar mærkning at korrigere.

    }

  5. Vær opmærksom på de firkantede seler efter "slet".Brug "slet" i sig selv for at frigøre et enkelt objekt.Brug "slet" [] med kantede parenteser for at befri en bunke array.Må ikke gøre noget som dette:

    char én = ny char;

    slet [] én;// Forkert

    char
    mange = ny char [30];

    slette mange;// Forkert!

Tips & amp;Advarsler

  • Undgå at blande C og C ++.Brug ny og slette eller bruge malloc () og gratis ().Under ingen omstændigheder bruge nye med gratis () eller malloc () med delete.

Ressourcer

  • Cplusplus.com tilbyder komplette C ++ tutorials.
  • Bruceeckel.com tilbyder to online bøger i C ++.
  • C / C ++ Brugere Journal har hjælp til C ++ udviklere.
986
0
1
C / C ++ Programming