Forum: PC-Programmierung Memory Leak Detection in MFC


von Peter (Gast)


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

von Peter (Gast)


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

von Rufus Τ. F. (rufus) Benutzerseite


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.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.