Wie finde ich einen Memory leak mit VS2010
-
Ich korrigiere mich, jetzt habe ich sowas:
WARNING: Visual Leak Detector detected memory leaks! ---------- Block 29 at 0x008A31C8: 16 bytes ---------- Call Stack: d:\programme\wxmsw-2.8.11\src\common\hash.cpp (870): wxHashTableBase::DoPut d:\programme\wxmsw-2.8.11\src\common\hash.cpp (870): wxHashTableBase::DoPut d:\programme\wxmsw-2.8.11\src\common\hash.cpp (870): wxHashTableBase::DoPut d:\programme\wxmsw-2.8.11\src\common\hash.cpp (870): wxHashTableBase::DoPut Data: C8 31 8A 00 18 32 8A 00 20 59 06 01 30 4D 8A 00 .1...2.. .Y..0M..
Das ist genauso aufschlussreich weil er den Fehler komplett woanders meldet, wo er sein sollte. Kann ich irgendwie über die Adresse zur Variable kommen?
-
Zeig mal den Code her
-
C0ddderr schrieb:
Zeig mal den Code her
Es ist ein ewig großes Programm mit sehr viel Code. Mein VS2008 hat keine Leaks angezeigt, so wusste ich nichts davon.
Wenn ich irgendwo einen Anhaltspunkt hätte, wäre mir schon geholfen. Ich habe alle news und deletes abgesucht.
-
memory_leak schrieb:
Wenn ich irgendwo einen Anhaltspunkt hätte, wäre mir schon geholfen. Ich habe alle news und deletes abgesucht.
VLD gibt doch die Stelle an.
Es gibt allerdings noch andere Möglichkeiten:
- globale oder statische Objekte, die irrtümlich als Leaks erkannt werden
- zyklische Abhängigkeit zum Beispiel mitboost::intrusive_ptr
- der Fehler liegt in einer Bibliothek
-
TyRoXx schrieb:
VLD gibt doch die Stelle an.
Es gibt allerdings noch andere Möglichkeiten:
- globale oder statische Objekte, die irrtümlich als Leaks erkannt werden
- zyklische Abhängigkeit zum Beispiel mitboost::intrusive_ptr
- der Fehler liegt in einer BibliothekWenn ich an diese Stelle einen Breakpoint setze, dann passiert nichts.
wxWidgets, stable, wird wohl keinen Memory Leak haben.
-
Kennst du die Memleak-Utilities von MS? Wenn nein: http://msdn.microsoft.com/en-us/library/5at7yxcs%28VS.71%29.aspx . Damit kannst du dir ohne fremdes Tool die Stellen im Code anzeigen lassen.
Wird dein Programm korrekt beendet? Das sieht nach einem Hash aus, dessen Einträge nicht korrekt released werden. Dann wird das als Leak erkannt. Vielleicht wird der auch von wxWidget nicht richtig released. Auch stable Packages haben Fehler :).
So was kenne ich zum Beispiel von Debug-Sessions, die sich nicht richtig beenden.Gruß Kimmi
-
Danke an alle Helfenden. Habe es endlich herausgefunden.
Dieses Memory Leak Programm und der Microsoft Link haben mich iterativ zur Lösung gebracht.
-
memory_leak schrieb:
Danke an alle Helfenden. Habe es endlich herausgefunden.
Dieses Memory Leak Programm und der Microsoft Link haben mich iterativ zur Lösung gebracht.Dürfen die Helfenden auch etwas daraus lernen? Wodurch entstand denn das Leck?
-
memory_leak schrieb:
Hallo!
Ich habe VS2010 Ultimate.
Nun meldet mir mein Programm folgendes:Detected memory leaks! Dumping objects -> {2876} normal block at 0x00ADB7F0, 48 bytes long. Data: < # <unk> 01 00 00 00 17 00 00 00 23 00 00 00 3C 75 6E 6B {2774} normal block at 0x00ADE498, 48 bytes long. Data: < . > 0C 2E F7 00 00 00 00 00 00 00 00 00 00 00 00 00 {2753} normal block at 0x00ADEDB0, 12 bytes long. Data: < * > 08 2A F7 00 00 00 00 00 01 CD CD CD {2748} normal block at 0x00ADE638, 24 bytes long. Data: < B > DC 42 F5 00 CD CD CD CD B0 EE AD 00 00 00 00 00 {2747} normal block at 0x00ADEEB0, 8 bytes long. Data: < D G > A0 44 F5 00 B8 47 AD 00 {2746} normal block at 0x00AD47B8, 44 bytes long. Data: < d 4E > 90 D7 F6 00 01 00 00 00 64 00 00 00 34 45 F5 00 {2662} normal block at 0x00ADFC08, 64 bytes long. Data: <| d > 7C F7 F6 00 01 00 00 00 01 00 00 00 64 00 00 00 {2661} normal block at 0x00ADFBC0, 8 bytes long. Data: < E > 08 45 F5 00 08 FC AD 00 {2660} normal block at 0x00ADFB58, 44 bytes long. Data: < d 4E > 90 D7 F6 00 01 00 00 00 64 00 00 00 34 45 F5 00 {2659} normal block at 0x00ADFB10, 8 bytes long. Data: < D X > A0 44 F5 00 58 FB AD 00 {2658} normal block at 0x00ADFAC0, 20 bytes long. Data: < C > 0C 43 F5 00 00 00 00 00 FF FF FF 02 01 FF FF FF {2657} normal block at 0x00ADFA58, 44 bytes long. Data: < j 4E > 90 D7 F6 00 01 00 00 00 6A 00 00 00 34 45 F5 00 {2656} normal block at 0x00ADFA08, 20 bytes long. Data: < C > 0C 43 F5 00 00 00 00 00 00 00 00 02 01 00 00 00
Das geht noch ewig lang weiter.
Wie finde ich diesen Leak?
-
TyRoXx schrieb:
memory_leak schrieb:
Danke an alle Helfenden. Habe es endlich herausgefunden.
Dieses Memory Leak Programm und der Microsoft Link haben mich iterativ zur Lösung gebracht.Dürfen die Helfenden auch etwas daraus lernen? Wodurch entstand denn das Leck?
Ist eigentlich etwas triviales gewesen.
Ich habe ein Array mit einer Größe initialisiert und mit der selben Größe-1 freigegeben. Dafür ist ganze Vormittag/Nachmittag draufgegangen