我想检查我的程序是否存在内存泄漏并发现这篇微软文章 https://msdn.microsoft.com/en-us/library/e5ewb1h3%28v=vs.71%29.aspx.
我彻底遵循了这篇文章并添加了
#define CRTDBG_MAP_ALLOC
#include <stdlib.h>
#include <crtdbg.h>
and
_CrtDumpMemoryLeaks();
当程序退出时。
它正确地转储了我的输出窗口中的所有内存泄漏信息,但问题是:
它不会打印内存泄漏所在的文件名和行号!
文章中说,与#define _CRTDBG_MAP_ALLOC
它打印文件名和行号,但不适合我。
我的输出看起来像这样
Detected memory leaks!
Dumping objects ->
{3456} normal block at 0x038F81E8, 560 bytes long.
Data: < A B> 00 00 00 00 00 00 10 41 00 00 00 FF 00 00 E6 42
{3447} normal block at 0x038F8170, 56 bytes long.
Data: < B ^ B > 80 42 90 03 10 02 5E 08 80 42 90 03 00 00 CD CD
{3440} normal block at 0x038F86B0, 840 bytes long.
Data: < A B> 00 00 00 00 00 00 10 41 00 00 00 FF 00 00 A8 42
...
所以我真的无法处理这个问题...按 F4 转到线路也不起作用。
请你帮助我好吗?
如果您还没有弄清楚@A.D,适用于 win32 应用程序,我们需要覆盖 new 运算符,我希望这会有所帮助。不幸的是它不适用于 MFC 应用程序。:(
#define _CRTDBG_MAP_ALLOC
#include<iostream>
#include <crtdbg.h>
#ifdef _DEBUG
#define DEBUG_NEW new(_NORMAL_BLOCK, __FILE__, __LINE__)
#define new DEBUG_NEW
#endif
int main()
{
_CrtSetDbgFlag ( _CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF ) ;
char *a = new char[10];
return 0;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)