我正在使用 Visual Studio 2010 中的 SDL 开发游戏。我遇到了_CrtDumpMemoryLeaks()
宏,并认为我会试一试。调用_CrtDumpMemoryLeaks()
确实将内存泄漏打印到输出窗口,但它没有显示它发生的位置。
我已经阅读了Memory Leak Detection Enabling上的 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;
}
输出如下:
Detected memory leaks!
Dumping objects ->
{58} normal block at 0x007D1510, 4 bytes long.
Data: < > 05 00 00 00
Object dump complete.
如果_CrtDumpMemoryLeaks()
在使用“新”进行分配时无法输出行号,那么我们将不胜感激提出其他实现类似行为的方法的建议。