capire le basi operatore . Il C + + operatore "new " memoria heap allocata . L'operatore "delete" libera la memoria heap . Per ogni " nuovo", è necessario utilizzare un "delete ", in modo da liberare la stessa memoria è allocato: .
Char * str = new char [ 30 ] ; //assegnare il 30 byte per ospitare una stringa
delete [ ] str ; //Cancella i 30 byte e fare str punto nulla
2
riallocare la memoria solo se hai eliminato . . Nel codice qui sotto , acquisisce str un nuovo indirizzo con la seconda assegnazione . Il primo indirizzo è perso irrimediabilmente , e così sono i 30 byte che puntasse a . Ora sono impossibili da libero , e si ha una perdita di memoria : .
Char * str = new char [ 30 ] ; //str Dare un indirizzo di memoria
//delete [ ] str ; //Rimuovere il primo commento marcatura in questa linea per correggere
str = new char [ 60 ] ; . . //Dare str un altro indirizzo di memoria con il primo andato per sempre
delete [ ] str ; //questo cancella la 60 byte , non solo il primo 30 .
3
guardare quelle assegnazioni puntatore . Ogni variabile dinamica ( memoria allocata nell'heap ) deve essere associata con un puntatore . Quando una variabile dinamica diventa dissociato dal suo puntatore ( s ) , diventa impossibile da cancellare . Ancora una volta , questo si traduce in una perdita di memoria :
char * str1 = new char [ 30] ;
char * str2 = new char [ 40 ] ;
strcpy ( str1 , " Perdita di memoria " ) ;
str2 = str1 ; //Bad ! Ora i 40 byte sono impossibili da free
Informazioni correlate
Programmazione © www.354353.com