Nachverfolgen von Speicherreservierungen
Dieses Thema gilt für folgende Anwendungsbereiche:
Edition |
Visual Basic |
C# |
F# |
C++ |
Web Developer |
---|---|---|---|---|---|
Express |
Nur "Systemeigen" |
||||
Pro, Premium und Ultimate |
Nur "Systemeigen" |
In MFC können Sie anstelle des Operators new auch das DEBUG_NEW-Makro verwenden, um Speicherverluste aufzudecken. In der Debugversion des Programms werden durch DEBUG_NEW die Dateinamen und Zeilennummern jedes von ihm reservierten Objekts nachverfolgt. Wenn Sie eine Releaseversion des Programms kompilieren, wird DEBUG_NEW in eine einfache new-Operation aufgelöst, ohne dass Dateinamen und Zeilennummern aufgelöst werden. Folglich wird die Ausführungsgeschwindigkeit der Releaseversion des Programms nicht beeinträchtigt.
Wenn Sie nicht das gesamte Programm umschreiben möchten, um DEBUG_NEW anstelle von new zu verwenden, können Sie dieses Makro in den Quellcodedateien definieren:
#define new DEBUG_NEW
Wenn Sie einen Objektdump erstellen, wird für jedes mit DEBUG_NEW zugeordnete Objekt der Dateiname und die Zeilennummer der Stelle angezeigt, an der es reserviert wurde. Auf diese Weise lässt sich die Ursache für Speicherverluste eindeutig ermitteln.
In der Debugversion des MFC-Frameworks wird DEBUG_NEW automatisch verwendet, im Code jedoch nicht. Um die Vorteile von DEBUG_NEW nutzen zu können, müssen Sie DEBUG_NEW explizit oder #define new, wie oben dargestellt, verwenden.