我正在使用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;
}
输出结果如下:
检测到内存泄漏!
正在转储对象 ->
{58} 在 0x007D1510 处的普通块,长度为 4 字节。
数据:< > 05 00 00 00
对象转储完成。
如果 _CrtDumpMemoryLeaks()
在使用“new”进行分配时无法输出行号,则欢迎提出其他实现类似功能的建议。