Vitajte na [www.pocitac.win] Pripojiť k domovskej stránke Obľúbené stránky

Domáce Hardware Siete Programovanie Softvér Otázka Systémy

Ako zabrániť pretečeniu pamäte v C + +

pretečeniu pamäte je typ programovaní chybu , ktorá nastane , keď program alokuje viac pamäte , než je uvoľní . Týmto spôsobom môže aplikácia spustiť z pamäte a spôsobiť zrútenie systému . Aby sa zabránilo úniku pamäti , čo potrebujete vedieť , kedy k nim dochádza najčastejšie a boli svedomití s použitím " nových " a " odstrániť " C + + operátorov . Veci , ktoré budete potrebovať
zbehlosti v jazyku C + +
C + + kompilátor
Debugger a ďalších vyšetrovacích softvérové ​​nástroje
Zobraziť ďalšie inštrukcie
1

Pochopiť základy obsluhy . C + + operátor " nový " prideľuje pamäť haldy . " Delete " operátor uvoľní pamäť haldy . Pre každý " nový " , mali by ste použiť " vymazať " , takže uvoľniť rovnakú pamäť vám pridelené : .
Char * str = new char [ 30 ] ; //Alokácia 30 bajtov do domu reťazec
delete [ ] str , //Clear tých 30 bajtov a aby str bod nikde
2

prerozdeliť pamäti iba v prípade , že ste odstránili .. V nižšie uvedenom kóde , str získava novú adresu s druhým pridelenie . Prvá adresa je nenávratne stratený , a tak sú 30 bajtov , že poukázala na . Teraz sú možné zadarmo a máte pretečeniu pamäte : .
Char * str = new char [ 30 ] ; //Give str adresa pamäti
//delete [ ] str ; //Odobrať prvý komentár označenie v tomto riadku opraviť klipart str = new char [ 60 ] ; .. //Give str ďalšie adries pamäte s prvým preč navždy
delete [ ] str , //To odstráni 60 bytov , a to nielen v prvom 30.
3

Sledujte tie ukazovatele úlohy . Každý dynamický variabilný ( pridelenej pamäte na halde ) musí byť spojená s ukazovateľom . Keď dynamická premenná sa stane oddeliť od jeho ukazovateľ ( y ) , to stane sa nemožné vymazať . Opäť platí , že to vedie k pretečeniu pamäte :
char * str1 = new char [ 30 ] ;
char * str2 = new char [ 40 ] ;
strcpy ( str1 , " pretečeniu pamäte " ) ;
str2 = str1 ; //Bad ! Teraz 40 bajtov je možné zadarmo
delete [ ] str2 ; . //Toto odstráni 30 bajtov
delete [ ] str1 ; . Porušenie //Možnosť pripojenia na internet . Aká katastrofa !
4

Buďte opatrní s miestnymi ukazovateľmi . Ukazovateľ deklarovať vo funkcii , je pridelený na zásobníku , ale dynamická premenná odkazuje na je na halde . Ak nechcete odstrániť , bude to pretrváva aj po skončení programu z funkcie :
void Leak ( int x ) {
char * p = new char [ x ] ;
//delete [ ] p ; //Remove prvý komentár označením opraviť
}
5

Venujte pozornosť hranatých zátvorkách po . " odstrániť . " Použite " odstrániť " sám o sebe uvoľniť jeden objekt . Použite " vymazať " [ ] hranatých zátvorkách uvoľniť haldy poľa . Nepoužívajte urobiť niečo také :
char * jedna = new char ;
delete [ ] jeden , //Zle
char * veľa = new char [ 30 ] ;
odstrániť veľa ; ! //Zle

Najnovšie články