VS 2013 _CrtDumpMemoryLeaks();



  • Hallo @all

    ich habe ein Problem mit der _CrtDumpMemoryLeaks() - Funtkion zur Erkennung von Speicherlecks.

    #define _CRTDBG_MAP_ALLOC
    #include <stdlib.h>
    #include <crtdbg.h>
    
    #ifdef _DEBUG  
    #ifndef DBG_NEW     
    #define DBG_NEW new ( _NORMAL_BLOCK , __FILE__ , __LINE__ )     
    #define new DBG_NEW   
    #endif
    #endif  // _DEBUG
    
    #include<string>
    using namespace std;
    
    std::string args;
    
    int main( int argc , char** argv )
    {
    	_CrtDumpMemoryLeaks();
    	return EXIT_SUCCESS;
    }
    

    Spuckt mir ein Speicherleck ( bei mir 8 Byte ) aus...
    Ich versteh auch warum, da zum Zeitpunkt von _CrtDumpMemoryLeaks() args's-Destruktor noch nicht aufgerufen wurde...
    Gibt es also eine möglichkeit _CrtDumpMemoryLeaks() aufzurufen, nachdem alle Globalen Variablen ihre Destruktoren aufgerufen haben, bzw. nachdem das Programm sich praktisch wirklich beendet würde ?

    Ich habe schon alternativ Visual Leak Detector ausprobiert, scheint aber nicht mit VS 2013 kompatibel zu sein...

    thx und mfG
    Hlymur



  • Probier mal

    //...
    
    std::string args;
    
    int main( int argc , char** argv )
    {
    #ifdef _DEBUG 
        _CrtSetDbgFlag(_CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF);
    #endif
        //_CrtDumpMemoryLeaks(); // brauchen wir nimmer, dank _CRTDBG_LEAK_CHECK_DF wird _CrtDumpMemoryLeaks automatisch bei Programmende ausgeführt
        return EXIT_SUCCESS;
    }
    

  • Mod

    In einem Debug Programm braucht man doch gar nichts zu machen... da sollte das doch genauso der Default sein.



  • Ah Perfekt!
    Dank dir 🙂

    Evtl. kann man das beim Debug-Modus irgendow einstellen, hab ich aber nicht gefunden
    und als Default ist/war es auch nicht eingestellt :S


  • Mod

    Ok. Das gilt scheinbar nur für MFC Projekte...


Anmelden zum Antworten