Datamaskin
  | Hjem | Hardware | Nettverk | Programmering | Software | Feilsøking | Systems | 
Programmering  
  • C /C + + Programming
  • Computer Programmeringsspråk
  • Delphi Programming
  • Java Programming
  • JavaScript Programmering
  • PHP /MySQL programmering
  • Perl Programming
  • Python Programming
  • Ruby Programming
  • Visual Basics Programming
  •  
    Datamaskin >> Programmering >> C /C + + Programming >> Content
    Slik unngår du at minnelekkasjer i C + +
    En minnelekkasje er en type programmering bug som oppstår når et program tildeler mer minne enn det frigjør . På denne måten kan en søknad går tom for minne , og føre til at systemet til å krasje . For å hindre minnelekkasjer , må du vite når de oppstår oftest og være pliktoppfyllende med din bruk av "nye" og "Slett" C + + operatører. Du trenger
    Ferdigheter i C + + Online C + + kompilatoren
    Debugger og andre undersøkende programvare verktøy
    Vis flere instruksjoner
    en

    forstå operatør grunnleggende. The C + + operator " nye" tildeler heap minne. Den " delete " operatør frigjør heap minne. For hver "nye ", bør du bruke en " delete ", slik at du frigjøre det samme minnet du tildelt : .
    Char * str = new char [ 30 ], //Fordele 30 byte for å huse en streng
    delete [ ] str ; //Clear de 30 bytes og gjøre str poeng ingensteds
    2

    reallocate minnet bare hvis du har slettet. . I koden nedenfor , får str en ny adresse med andre tildeling. Den første adressen er tapt ugjenkallelig , og så er de 30 bytes som det pekt på . Nå er de umulig å fri , og du har en minnelekkasje : .
    Char * str = new char [ 30 ], //Gi str et minne adresse Twitter //delete [ ] str ; //fjern den første kommentaren merking i denne linjen for å korrigere
    str = new char [ 60] ; . . //Gi str annet minne adresse med det første borte for alltid
    delete [ ] str ; //dette sletter 60 bytes , ikke bare de første 30 .
    3

    Sjekk disse pekeren oppdrag. Hver dynamisk variabel ( tildelte minnet på haugen ) må være forbundet med en peker . Når en dynamisk variabel blir disassociated fra dens spisser ( e) , blir det umulig å slette . Igjen , dette resulterer i en minnelekkasje :
    char * str1 = new char [ 30 ];
    char * str2 = new char [ 40 ];
    strcpy ( str1 , "Memory lekkasje ") ;
    str2 = str1 ; //Bad ! Nå 40 bytes er umulig å gratis nedlasting delete [ ] str2 ; . //Dette sletter de 30 bytes
    delete [ ] str1 ; . //Mulig tilgang brudd . Hva en katastrofe !
    4

    Vær forsiktig med lokale pekere . En peker du erklære en funksjon fordeles på stakken , men dynamisk variabel den peker til fordeles på haugen. Hvis du ikke sletter den, vil det vedvare etter at programmet kommer ut av funksjon : en void Leak ( int x ) {
    char * p = new char [ x ]; Twitter //delete [ ] p; . //Ta av første kommentar merking for å korrigere
    }
    5

    Vær oppmerksom på firkant parenteser etter "slett ". Bruk " delete " av seg selv for å frigjøre ett enkelt objekt. Bruk " delete " [ ] med hakeparenteser for å frigjøre en haug array. Ikke gjør noe som dette : en char * en = new char ;
    delete [ ] ett , //Feil
    char * mange = new char [ 30 ];
    slette mange ; ! //Feil

    früher :

     Weiter:
      Relatert Artike
    ·Hvordan å erklære en String i C + + 
    ·C + + Datatyper 
    ·Hvordan å kompilere Flere CPP filer 
    ·Hvordan bygge en Game Engine From Scratch 
    ·Hvordan skrive en Hex File 
    ·Hvordan pakke ut en fil i C # 
    ·Hvordan sende FIFO Utgang til en fil 
    ·Hvordan lage en Exit -knappen i C + + 
    ·Hvordan få en ARGV Input Argument i C + + 
    ·Hvordan skrive en C + + program som beregner gjennomsni…
      Anbefalte artikler
    ·Viktigheten av Decision Structures i programmering 
    ·PHP kan koble til en ekstern MySQL database , men det k…
    ·Slik kopierer koden Knapp for innebygging 
    ·Hvordan kontrollere en nettleser fra Vb.net 
    ·Slik konverterer HTML til tekst PHP 
    ·Hvordan lage en INF -fil for en CAB 
    ·Hvordan Test XML Fra XSD 
    ·Slik fjerner Merknader fra Java-kode 
    ·Deler av Microsoft Visual C + + 
    ·Hvordan åpne en fil og skrive en linje til en annen fi…
    Copyright ©  Datamaskin  http://www.datamaskin.biz/