From my own experience, the memory leak output gone missing can be due to different reasons. to summarize the most important ones:
Changes in the source code that:
- disable memory leak reporting (i.e. using _CrtSetDbgFlag)
- install custom report hooks (see _CrtSetReportHook, _CrtSetReportHook2)
- redirect the output to a file (see CrtSetReportMode
- changes in the source code that lead to silent "crashes" on application termination - the application silently terminates without any indication of a problem before reaching the point where the memory leaks are reported (as improbable this might seem I had this once).
Settings in the development environment cause the output to be redirected to another window. One possibility would be: Tools \ Options \ Debugging \ General \ Redirect all Output Window text to the Immediate Window (the fifth from bottom). Probably other possibilities exist here.
I guess one possibility to rule out point 2 would be to create a simple console application in the lines of (main.cpp):
#define _CRTDBG_MAP_ALLOC
#include <stdlib.h>
#include <crtdbg.h>
#ifndef DEBUG_NEW
#define DEBUG_NEW new(_NORMAL_BLOCK, __FILE__, __LINE__)
#define new DEBUG_NEW
#endif
int _tmain(int argc, _TCHAR* argv[])
{
int nOldState = _CrtSetDbgFlag(_CRTDBG_REPORT_FLAG);
_CrtSetDbgFlag(nOldState | _CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF);
int *pInt = new int[100];
return 0;
}
If running this application correctly outputs memory leaks then unfortunately you are probably in case 1
Of course I ruled out the obvious things why the output could be gone (some of them already mentioned in the comments).