[C++] Memory Leaks (GELÖST!)

Programmiersprachen, APIs, Bibliotheken, Open Source Engines, Debugging, Quellcode Fehler und alles was mit praktischer Programmierung zu tun hat.
Antworten
Benutzeravatar
ponx
Establishment
Beiträge: 217
Registriert: 04.05.2008, 12:52
Echter Name: Andy Ponx
Wohnort: Hamburg
Kontaktdaten:

[C++] Memory Leaks (GELÖST!)

Beitrag von ponx »

Hallo alle !
Ich habe ein Projekt übernommen, das ich auf Memory Leaks testen will, und bin jetzt etwas verwirrt: Normalerweise hab ich immer den Visual Leak Detector benutzt, mit dem war ich eigentlich immer ganz zufrieden. Der zeigt mir auch an, es sei alles in Ordnung, dafür meldet der VS 2008 interne Test (CRT ?) am Ende haufenweise Memory leaks. Die sehen z.B. so aus:

Code: Alles auswählen

...
{1153} normal block at 0x04EF68A8, 80 bytes long.
 Data: < #    L?   ?    > D4 23 09 10 CD CC 4C 3F 00 00 00 3F 03 00 00 00 
{1144} normal block at 0x04EF6F50, 28 bytes long.
 Data: <  5  q    5 A   > F0 8B 35 00 08 71 EF 04 F0 8B 35 00 41 0D 03 00 
{1143} normal block at 0x04EF6F10, 16 bytes long.
 Data: <            pm  > D8 1A 09 10 01 00 00 00 01 00 00 00 70 6D EF 04 
{1142} normal block at 0x04EF6D70, 28 bytes long.
 Data: <   ?            > 00 00 00 3F CD CD CD CD 00 00 00 00 00 00 00 00 
{1141} normal block at 0x04EF6E98, 72 bytes long.
 Data: < j  `j   k  Hk  > 18 6A EF 04 60 6A EF 04 00 6B EF 04 48 6B EF 04 
...
Ich fürchte, die CRT hat Recht.. bei MSDN steht, man sollte #define _CRTDBG_MAP_ALLOC setzen, um mehr Infos zu bekommen, wie z.B. die Zeilennummer, aber das hatte bei mir keinen Effekt. Jetzt die Frage: Was mach ich falsch ? Und was benutzt ihr, um memory leaks zu finden ?

Und zu guter letzt: Das Projekt besteht aus einer Library und einer MFC-Anwendung, das diese Library benutzt. Wenn ich in der MFC-Anwendung mir die Memleaks anzeigen lasse, bekomme ich dann auch die aus der Library angezeigt ?

wie immer sehr dankbar für jeden Hinweis:
ponx
Zuletzt geändert von ponx am 15.02.2010, 12:07, insgesamt 1-mal geändert.
Benutzeravatar
kimmi
Moderator
Beiträge: 1405
Registriert: 26.02.2009, 09:42
Echter Name: Kim Kulling
Wohnort: Luebeck
Kontaktdaten:

Re: [C++] Memory Leaks

Beitrag von kimmi »

Ich habe dazu mal einen englischen Text verbrochen:
http://sir-kimmi.de/blog/?p=14
Willst du den Kram von der MFC nutzen, hat man einen komplette Rebuild gewonnen.

Und ansonsten nehme ich Leakdiag und umdh unter Windows-XP und Konsorten. Um Langlauf-tests zu verifizieren, benutze ich perfmon.

Gruß Kimmi
Benutzeravatar
ponx
Establishment
Beiträge: 217
Registriert: 04.05.2008, 12:52
Echter Name: Andy Ponx
Wohnort: Hamburg
Kontaktdaten:

Re: [C++] Memory Leaks

Beitrag von ponx »

vielen Dank, Kimmi !
Ich hab das so gemacht wie auf deiner Seite angegeben (die beiden "_Crt.."-Aufrufe waren neu), aber leider hab ich immer noch keine Zeilenangabe im output :? Ich hab dieses #define _CRTDBG_MAP_ALLOC auch schon testweise gleich in der Configuration bei den präprozessor optionen gesetzt, aber kein Erfolg leider. Vielleicht kommt er irgendwie durcheinander, weil ich boost::shared_ptr benutze ?
Benutzeravatar
kimmi
Moderator
Beiträge: 1405
Registriert: 26.02.2009, 09:42
Echter Name: Kim Kulling
Wohnort: Luebeck
Kontaktdaten:

Re: [C++] Memory Leaks

Beitrag von kimmi »

Soweit ich weiß, muß das auch noch am Anfang deiner Files stehen:

Code: Alles auswählen

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
Siehe hierzu auch:
http://www.highprogrammer.com/alan/wind ... tudio.html

Ich hoffe, das hilft dir weiter.

Gruß KImmi
Benutzeravatar
ponx
Establishment
Beiträge: 217
Registriert: 04.05.2008, 12:52
Echter Name: Andy Ponx
Wohnort: Hamburg
Kontaktdaten:

Re: [C++] Memory Leaks

Beitrag von ponx »

hallo Kimmi, vielen Dank für den Link !
Die Info aus deinem Link dass MFC da immer automatisch was reinschreibt hat mich sehr beruhigt. Die interne memory-leak warnung kannte ich noch nicht, jetzt weiß ich wenigstens wo sie herkommt, und auch warum ich die nicht abstellen kann. Mittlerweile läuft der VLD wieder so wie erhofft (ein #include in meiner DLL hatte gefehlt) ! schampus !!
ponx
Antworten