"Detected memory leaks!" Wie finde ich die Quelle
-
Hallo,
ich hab seit kurzem erst das Visual Studio. Scorcher24 hat mir verraten, wie ich feststelle, ob ich Memory Leaks habe. Nun habe ich als Newbe(e) tatsächlich ein Memory Leak gefunden:
Detected memory leaks! Dumping objects -> {8492} normal block at 0x00ED9AF0, 24 bytes long. Data: < h > F0 68 16 00 FF FF FF FF 00 00 00 00 00 00 00 00
Nur leider kann ich nicht finden, wo das entsteht. Hat jemand einen Tipp für mich, wie man in solchen Fällen vorgeht? Hilft nur den kanen Code auszukommentieren und Step by Step den Code wieder einzufügen bis die Memory Leaks auftreten und dann hab ich die Stelle? Oder finde ich irgendwie anders raus, welcher Pointer der Böse war?
Danke,
StefanEDIT:
Link zum Thread wg Memory Leaks auffindung:
http://www.c-plusplus.net/forum/viewtopic-var-t-is-237837.html
-
http://msdn.microsoft.com/en-us/library/e5ewb1h3(VS.80).aspx
wenn man es so macht wie beschrieben, soll die stelle angezeigt werden, wo die allokation passiert (datei, zeile).
hat bei mir allerdings noch nie funktioniert.eine andere möglichkeit: _CrtSetBreakAlloc(8492); an den anfang deines programms eingefügt, setzt einen brechpunkt auf die stelle. ist nur problematisch, wenn die allokation in einem statischen objekt passiert.
-
emesdeen schrieb:
ist nur problematisch, wenn die allokation in einem statischen objekt passiert.
statisches globales objekt war gemeint - die allokation könnte dann passieren, bevor main() aufgerufen wird.
-
Hallo,
danke für die Tipps. Ich hab mir das ganze mal für die Version Visual Studio 2008 hergesucht:
http://msdn.microsoft.com/de-de/library/x98tx3cf.aspxLeider ist dort die Unterstützung:
Nur "Systemeigen"
Ich werd das mal in Ruhe testen, auf die schnelle hab ich nämlich keine Code oder Zeilennummern bekommen sondern nachwievor den Dump der oben steht.
-
die beiden artikel sind inhaltlich gleich. die dümmlichen deutschen übersetzungen sind bloß meistens stark irreführend.
stefanjann schrieb:
Leider ist dort die Unterstützung:
Nur "Systemeigen"
aha. und weißt du auch, was das bedeutet?
-
emesdeen schrieb:
aha. und weißt du auch, was das bedeutet?
Keine Ahnung! Das versuche ich gerade rauszufinden.
-
es bedeutet, dass die funktionalität nur mit nativem code funktioniert und nicht mit managed code. da du offenbar nicht in c++/cli programmierst, ist das für dich irrelevant.
ich habs auch noch nicht geschafft, dass die allokationen vernünftig angezeigt werden. entweder ist die anleitung falsch oder es funktioniert generell nicht.
aber mit _CrtSetBreakAlloc() bekommt man in der regel einen brauchbaren callstack mit der betreffenden stelle.
-
Erster Aufruf schrieb:
Detected memory leaks!
Dumping objects ->
{8492} normal block at 0x00ED9AF0, 24 bytes long.
Data: < h > F0 68 16 00 FF FF FF FF 00 00 00 00 00 00 00 00Zweiter Aufruf schrieb:
Detected memory leaks!
Dumping objects ->
{6145} normal block at 0x00ED9AF0, 24 bytes long.
Data: < h > F0 68 16 00 FF FF FF FF 00 00 00 00 00 00 00 00_CrtSetBreakAlloc(8492);
Da die Zahl in Klammern bei jedem Start anders ist, stehe ich jetzt folglich wieder mit NULL da!
Danke trotzdem erstmal.
-
Nabend,
versuch es mal so --> Klick!
#define new DEBUG_NEW
Hat mir sehr geholfen, abgesehen davon versuch mal die Forenhilfe!
LG, Julian
-
http://www.codeproject.com/KB/applications/leakfinder.aspx
Mit meinem neueren Source:
http://blog.kalmbachnet.de/files/LeakFinder-RC8.zip