Ein Speicherleck ist , wenn ein Programm bewirkt eine inkrementelle , aber stetigen Verbrauch von Speicher , so dass das Programm mehr Speicher als es braucht, zu verwenden. Im besten Fall wird das Programm einfach mehr Speicherplatz und verlangsamen den Computer. Extreme Fälle genügend Speicher verwenden, um andere Programme zum Absturz wegen des Mangels an verfügbaren Speicher im schlimmsten Fall wird es zum Absturz Ihres Betriebssystems. In C + +, Speicherlöcher kann durch verschiedene Fehler bei der Codierung verursacht werden. Im Folgenden wird gezeigt, wie Sie überprüfen, ob Ihr Programm hat einen Speicherverlust und wo sie zu finden . Anleitung
1
Finden Sie heraus, ob Ihr Programm hat einen Speicherverlust. Führen Sie das Programm über den Debugger durch Eingabe von:
' _CrtDumpMemoryLeaks () '
Die erste Zeile des Codes wird " Erkannt Speicherlecks ! " Wenn nicht, dann wird das Programm nicht über einen Speicherverlust.
2
Spüren Sie den Standort der Speicherverlust. Die dritte Zeile von Madame
' _CrtDumpMemoryLeaks () '
mit der Anweisung verwendet :
' # define _CRTDBG_MAP_ALLOC '
wird Ihnen sagen, den Namen des Datei, in der Speicherbelegung zugeordnet wurde. Sie können auch MFC Speicherzuweisungen verfolgen. In MFC das Makro : .
' DEBUG_NEW '
kann verwendet werden, um Speicherlecks zu verfolgen
3
zu der Datei angegeben gehen . Die schlechten Codierung müssen entfernt werden. Es gibt mehrere Ursachen für einen Speicherverlust ; falsche Verwendung von new /delete , ein verlegtes löschen , "verloren" Zeiger oder ein Zeiger den Gültigkeitsbereich verlässt . Überprüfen Sie die Codezeilen , wo Speicher zugewiesen und beheben Sie mögliche Probleme . Prüfen, ob zugewiesenen Speicher in einer Schleife in jeder Iteration gelöst wird. Achten Sie darauf, Zeiger können nicht aus dem Rahmen , bevor Speicher freigegeben wird . Überprüfen Sie auch , dass die Codes:
' malloc ' /' kostenlos '
'new' /'delete'
' new [] ' /delete [] '
korrekt verwendet
4
Führen Sie das Programm über den Debugger wieder durch Eingabe von:
' _CrtDumpMemoryLeaks () '
um zu sehen , ob das Problem weiterhin auftritt.