Memory Leak Detection in MFC

Gast #4104607
Lesenswert?
• ▲
▼
Hallo,

ich versuche die im Betreff genannt Funktion in mein MFC (VC++ 2008) 
Projekt zu integrieren.



Was ich bisher gemacht habe:

1. Im Cpp-File folgende Zeile eingefügt:
1
#define _CRTDBG_MAP_ALLOC
2
#include <stdlib.h>
3
#include <crtdbg.h>
2. An der Stelle wo die Debug-Ausgabe erscheinen soll steht:
1
_CrtDumpMemoryLeaks();

3. Ich habe die geprüft crtdbg.h vorhanden ist:
C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\crt\src
C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\include

4. Die Pfade unter Punkt 3 habe ich unter

Tools -> Options ->Projects-> VC++ Directory

gesetzt.

5. Das Compilieren läuft durch, jedoch will der Linker nicht so richtig 
mit spielen.

C:\Program Files (x86)\Microsoft Visual Studio 
9.0\VC\include\crtdbg.h(649) : warning C4005: 'wcsdup' : macro 
redefinition
        C:\Program Files (x86)\Windows CE 
Tools\wce500\KeTopT50_VGA\Include\Armv4i\stdlib.h(175) : see previous 
definition of 'wcsdup'
WINVER not defined. Defaulting to 0x0400, which is appropriate for all 
supported Windows CE versions
C:\Program Files (x86)\Microsoft Visual Studio 
9.0\VC\ce\include\altcecrt.h(77) : warning C4005: '_recalloc' : macro 
redefinition
        C:\Program Files (x86)\Microsoft Visual Studio 
9.0\VC\include\crtdbg.h(615) : see previous definition of '_recalloc'
C:\Program Files (x86)\Microsoft Visual Studio 
9.0\VC\ce\include\altcecrt.h(181) : warning C4005: '_ASSERT_BASE' : 
macro redefinition
        C:\Program Files (x86)\Microsoft Visual Studio 
9.0\VC\include\crtdbg.h(493) : see previous definition of '_ASSERT_BASE'
C:\Program Files (x86)\Microsoft Visual Studio 
9.0\VC\ce\include\altcecrt.h(197) : warning C4005: '_CrtDbgBreak' : 
macro redefinition
        C:\Program Files (x86)\Microsoft Visual Studio 
9.0\VC\include\crtdbg.h(591) : see previous definition of '_CrtDbgBreak'



error LNK2019: unresolved external symbol _CrtDumpMemoryLeaks referenced 
in function "private: virtual void __cdecl 
CCalibrationDlg::addOnPaint_Graph(class CDC *)" 
(?addOnPaint_Graph@CCalibrationDlg@@EAAXPAVCDC@@@Z)
Device(ARMV4I)\Debug/MFC_SmartDeviceDefault2.exe : fatal error LNK1120: 
1 unresolved externals



Hat jemand bereits Erfahrung mit der _CrtDumpMemoryLeaks() -Funktion 
gehabt?

Gruß,
Peter
Gast #4104643
Lesenswert?
• ▲
▼
Hallo,

ich denke es liegt daran, dass das SDK, welche ich verwende, diese 
Funktion nicht unterstützt.


Nach weiterem gogglen: sollte man unter

Properties→Configuration Properties→Linker→General, I set Additional 
Library Directories

den Pfad zu den verwendeten Libs setzen und unter

Properties→Configuration Properties→Linker→Input->Additional 
Dependencies

auf diese Libs verweisen:

ComCtl32.Lib ComDlg32.Lib


Gruss,
Peter
Persönliche Seite #4105154
Lesenswert?
• ▲
▼
Wenn Du mit MFC arbeitest, ist all dieser Aufwand gar nicht 
erforderlich.

Weder musst Du irgendwelche Libraries angeben, noch _CrtDumpMemoryLeaks 
aufrufen -- das macht die Laufzeitumgebung in Debug-Builds von selbst.

Du brauchst nur in jedem Sourcefile diese Definition:

#define new DEBUG_NEW

Gibt es Speicherlecks, wird beim Beenden des Programmes ein Speicherdump 
ausgegeben, mit dem Typ des jeweiligen Objekts und dem Ort, wo es 
angelegt wurde.

Das macht die MFC so schon sehr, sehr lange, das gab es schon zu 
VC6-Zeiten.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 11 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.