我的代码是遗留代码,并且在某个地方引入了很长时间的内存泄漏。我在用
_CrtSetDbgFlag ( _CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF );
它隐式地调用_CrtDumpMemoryLeaks();
代码中任何地方的终止/退出。我知道如果我们_CrtDumpMemoryLeaks();
显式调用并且存在一些全局对象,则会报告内存泄漏。这就是为什么不_CrtDumpMemoryLeaks()
直接调用。
获取内存泄漏,并且由于我在整个代码中使用“新”,因此不会出现确切的行号和文件名(尽管声明了 #define _CRTDBG_MAP_ALLOC)。我有 3 个选项:
1. Use VLD: but it does not report any leaks.
2. Override new operator so that CRT works. But get error that new is redefined. actually since it is a huge code base, some other place has overriden it conflicts are arising
3. Use number in curly braces and use _crtbreakalloc , but that number is not stable across runs. thus cannot use this strategy as well.
请帮我解决这个问题。有更好的内存泄漏检测工具吗?我也在 Linux 上使用了 Valgrind。它也不会报告任何内存泄漏。只有 CRT 调试报告。