我正在使用Visual Studio 2010中的SDL进行游戏.我遇到了_CrtDumpMemoryLeaks()宏,并认为我会试一试.调用_CrtDumpMemoryLeaks()会将内存泄漏打印到输出窗口,但它不会显示它发生的位置.
我已经阅读了内存泄漏检测启用的MSDN文章,它解释了如果我定义_CRTDBG_MAP_ALLOC它应该输出有问题的语句的行号.在我的情况下,这不会发生.(但是,如果我直接使用malloc(),而不是使用'new',我能够让它工作.
代码:
#define _CRTDBG_MAP_ALLOC
#include <crtdbg.h>
#include <stdlib.h>
int main(int argc, char *argv[]) {
int *var = new int(5);
_CrtDumpMemoryLeaks();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
输出如下:
Run Code Online (Sandbox Code Playgroud)
Detected memory leaks!
Dumping objects ->
{58} normal block at 0x007D1510, 4 bytes long.
Data: < > 05 00 00 00
Object dump complete.
If _CrtDumpMemoryLeaks()在使用"new"分配时无法输出行号,然后建议其他方法来实现类似的行为.
我想在我的Visual C++ 2005解决方案中的每个源文件中出现以下内容:
#define DEBUG_NEW new(_NORMAL_BLOCK, __FILE__, __LINE__)
#define new DEBUG_NEW
Run Code Online (Sandbox Code Playgroud)
有没有办法在不手动复制的情况下执行此操作?编译选项?