Speicherleck entdecken in MSVC05: _CRTDBG_MAP_ALLOC keine code zeile



  • Ich möchte mit den Bordmitteln von MSVC Express 2005 Speicherlecks jagen. Dazu wird in der Hilfe empfohlen, dass die Funktion _CrtDumpMemoryLeaks() aufgerufen werden soll. Dadurch bekomme ich auch Lecks angezeigt, allerdings ohne Orts-/Zeilenangabe.
    Die soll aktivierbar sein über das Flag _CRTDBG_MAP_ALLOC.

    Somit habe ich folgenden Codeblock zu Anfang stehen (samt notwendiger header):

    #define _CRTDBG_MAP_ALLOC
    #include <stdlib.h>
    #include <crtdbg.h>

    und am Ende meiner main:

    _CrtDumpMemoryLeaks()

    Leider werden die codezeilen aber immer noch nicht angezeigt. Was mache ich falsch?


  • Mod

    Das geht natürlich nur in den Modulen in denen Du das auch definierst.
    Im Normalfall ist aber hier der Schalter _DEBUG ausschlaggebend der für die korrekte Funktion sorgt.

    Hast Du denn einen Debug Build gemacht?



  • Na ich denke doch schon: In der Tool-Leiste von MSVC gibt es ja den schnellen Umschalter namens "Projektmappenkonfiguration" der ist auf "Debug", außerdem debugge ich dann das Projekt natürlich. Es ist ja auch so, dass ich Angaben zu den Speicherlecks bekomme, es fehlen halt nur die Zeilenangaben.

    [Zusatz]
    Ich komme dem "Fehler" langsam auf die Schliche. Speicherlecks, die direkt in der main-Datei produziert werden, bekommen auch eine Zeilennummerierung. Nur verstehe ich nicht warum: Ich definiere das Flag _CRTDBG_MAP_ALLOC ganz zu Anfang, noch bevor ich die Dateien inkludiere, die Lecks verursachen könne. Daher müsste das Flag doch für alle gelten ..


  • Mod

    Wenn Du eine Funktion in einem anderen Modul aufruftst und dort ist dieser define nicht gemacht worden, dann wird auch darüber nicht berichtet.

    Wenn Du aber schon auf Debug umgestellt hast, dann benötigst Du diesen define nicht mehr. Der ist in diesem Fall der Standard.

    Was sollen denn das für Leaks sein? Mit _CrtSetBreakAlloc kannst Du die Id angeben an der der Debugger anhalten soll. Dann kannst Du im Stacktrace sehen was dort geschieht.


Anmelden zum Antworten