Come eseguire il debug di una perdita di memoria in C ++

January 30

Una perdita di memoria è quando un programma provoca un consumo incrementale ma costante della memoria, causando il programma di utilizzare più memoria di cui ha bisogno. Nella migliore delle ipotesi il programma è sufficiente utilizzare più memoria e rallentare il computer. Casi estremi useranno memoria sufficiente per causare altri programmi in crash a causa della mancanza di memoria disponibile, peggiore delle ipotesi si andrà in crash il sistema operativo. In C ++, le perdite di memoria possono essere causati da diversi errori diversi nella codifica. Di seguito vi mostrerà come controllare per vedere se il programma dispone di una perdita di memoria e dove trovarlo.

istruzione

1 Scopri se il tuo programma ha una perdita di memoria. Eseguire il programma attraverso il debugger digitando:

'_CrtDumpMemoryLeaks ()'

La prima riga di codice leggerà "perdite di memoria rilevati!" Se no, allora il programma non ha una perdita di memoria.

2 Rintracciare la posizione della perdita di memoria. La terza linea di

'_CrtDumpMemoryLeaks ()'

utilizzato con l'affermazione:

'_CRTDBG_MAP_ALLOC #define'

vi dirà il nome del file in cui è stata assegnata la memoria persa. È inoltre possibile utilizzare MFC per tenere traccia delle allocazioni di memoria. In MFC la macro:

'DEBUG_NEW'

può essere utilizzato per monitorare le perdite di memoria.

3 Vai al file indicato. La cattiva codifica dovrà essere posizionato. Ci sono diverse cause di una perdita di memoria; utilizzo errato di new / delete, un fuori luogo di eliminazione, "perso" puntatori o un puntatore esce dallo scope. Controllare le linee di codice in cui è allocato la memoria e correggere eventuali problemi. Controllare se la memoria allocata in un ciclo viene rilasciato in ogni iterazione. Assicurati di puntatori non può uscire di portata prima memoria si sblocca. Controllare anche che i codici:

'Malloc' / 'libero'

'Nuovo' / 'delete'

'New []' / delete [] '

sono utilizzati correttamente.

4 Eseguire il programma attraverso il debugger di nuovo digitando:

'_CrtDumpMemoryLeaks ()'

per vedere se il problema persiste.