Dator
 |  Startsida |  Hårdvara |  Nätverk |  Programmering |  Programvara |  Felsökning |  System |   
Programmering
  • C /C + + -programmering
  • Computer Programspråk
  • Delphi Programmering
  • Java Programming
  • JavaScript programmering
  • PHP /MySQL Programmering
  • perl Programmering
  • python Programming
  • Ruby programmering
  • Visual Basics Programmering
  • * Dator Kunskap >> Programmering >> C /C + + -programmering >> Content

    Förhindra att Minnesläckor i C + +

    En minnesläcka är en typ av programmering bugg som inträffar när ett program allokerar mer minne än det frigör . På så sätt kan en applikation få slut på minne och orsaka att systemet kraschar . För att förhindra minnesläckor , måste du veta när de inträffar oftast och vara samvetsgrann med din användning av " nya " och " Delete" C + + operatörer . Saker du behöver
    Kunskaper i C + + Review C + + kompilator
    Debugger och andra undersökande verktyg programvara
    Visa fler instruktioner
    1

    förstå verksamhetsutövarens grunderna . Den C + + operatör " ny " allokerar heap minne . Den " delete " operatör frigör heap minne . För varje " ny ", bör du använda ett " delete " så att du frigöra samma minne du tilldelas : .
    Char * str = new char [ 30 ] , //Tilldela 30 bytes för att hysa en sträng
    delete [ ] Str , //Rensa dessa 30 byte och göra Str punkt ingenstans Addera 2

    Omfördela minnet endast om du har tagit bort . . I koden nedan , str förvärvar en ny adress med den andra fördelningen . Den första adressen är förlorat oåterkalleligt , och så är de 30 byte som den pekade på . Nu är de omöjliga att fria , och du har en minnesläcka : .
    Char * str = new char [ 30 ] , //Ge str en minnesadress Twitter //delete [ ] Str ; //Ta bort den första kommentaren märkning i denna linje för att korrigera
    str = new char [ 60 ] , . . //Ge str annan minnesadress med den första borta för alltid
    delete [ ] str , //​​detta raderar den 60 bytes , inte bara den första 30 .
    3

    Titta dessa pekare uppdrag . Varje dynamisk variabel ( allokerat minne på heap ) behöver associeras med en pekare . När en dynamisk variabel blir skiljas från sin pekare ( s ) , blir det omöjligt att radera . Återigen , detta resulterar i en minnesläcka :
    char * str1 = new char [ 30 ] ,
    char * str2 = new char [ 40 ] ,
    strcpy ( str1 , " Memory läcka " ) ;
    str2 = str1 , //Bad ! Nu 40 bytes är omöjliga att fria
    delete [ ] str2 , . //Detta raderar den 30 bytes
    delete [ ] str1 , . //Möjlig tillgång kränkning . Vilken katastrof !
    4

    Var försiktig med lokala pekare . En pekare du deklarera en funktion fördelas på stacken , men den dynamiska variabeln den pekar fördelas på högen . Om du inte tar bort det , kommer det att finnas kvar efter programmet avslutas från funktionen :
    void Leak ( int x ) {
    char * p = new char [ x ] ; Twitter //delete [ ] p; . //ta bort den första kommentaren märkningen att korrigera
    }
    5

    uppmärksam på hakparanteser efter " bort . " Använd " delete " i sig för att befria ett enda objekt . Använd " delete " [ ] med hakparenteser för att frigöra en heap array . Inte göra något sånt här :
    char * en = ny char ,
    delete [ ] en , //Fel
    char * Många = new char [ 30 ] ,
    bort många ; ! //Fel

    Tidigare:

    nästa:
    relaterade artiklar
    ·Hur man gör ett lotteri med C + +
    ·Hur man öppnar ett PDF i C #
    ·Hur man använder den viktigaste funktionen i C + +
    ·Hur man kompilerar C kod med G+ +
    ·Hur man gör en MFC arbetstråd
    ·Hur du använder Threading och meddelanden i Visual C +…
    ·Hur Extern en statisk medlem
    ·Hur man använder alternativknappar i Visual C
    ·Hur öppna flera filer för ingång och utgång i C + +…
    ·Hur man använder Xcode
    Utvalda artiklarna
    ·Hur man gör spalter med div-taggar
    ·Hur hittar man den längd en Array i Perl
    ·Hur Tally procent i C + +
    ·Hur man använder Fortran i C + + Linux
    ·Lägga en textruta och knapp för DataGrid
    ·Hur man använder kod DBL
    ·Hur Exportera en fast filbredden text för en tabell i …
    ·Hur man stänger en On Screen Varning i PHP
    ·Hur till Ändra Sidhuvud
    ·Definition av en Flödesschema
    Copyright © Dator Kunskap http://www.dator.xyz