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; }
-
In einem Debug Programm braucht man doch gar nichts zu machen... da sollte das doch genauso der Default sein.
-
Ah Perfekt!
Dank dirEvtl. kann man das beim Debug-Modus irgendow einstellen, hab ich aber nicht gefunden
und als Default ist/war es auch nicht eingestellt :S
-
Ok. Das gilt scheinbar nur für MFC Projekte...