Vitajte na [www.pocitac.win] Pripojiť k domovskej stránke Obľúbené stránky
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