Home Hardware Networking Programmazione Software Domanda Sistemi
Conoscenza Informatica >> Programmazione >> C /C + + Programming >> .

Come prevenire le perdite di memoria in C + +

Una perdita di memoria è un tipo di bug di programmazione che si verifica quando un programma alloca più memoria di quanto non libera . In questo modo, un'applicazione può esaurire la memoria e causare il blocco del sistema . Per evitare perdite di memoria , è necessario sapere quando si verificano più frequentemente e di essere coscienzioso con l'utilizzo del "nuovo" e " delete " operatori C + + . Cose che ti serviranno
Proficiency in C + + Commercio compilatore C + +
debugger e altri strumenti di indagine software
Mostra più istruzioni
1

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

 

Programmazione © www.354353.com