您的位置:首页 > 其它

vc不包含MFC就不打印内存泄露?

2013-03-21 01:48 274 查看
  无聊写了段测试代码,发现一个很费解的地方,下面这段代码是没有包含MFC的:

#include "stdafx.h"

struct stTest
{
int a;
int b;
char szTest[32];
stTest()
{
a = 1;
b = 2;
sprintf(szTest, "abc");
}
};

int _tmain(int argc, _TCHAR* argv[])
{
stTest* p = new stTest;
printf("a = %d, b = %d, c = %s\n", p->a, p->b, p->szTest);

getchar();

return 0;
}


然后程序结束的时候并没有在输出面板打印内存泄露。如下图:



  如果程序包含了MFC,例如:

 

#include "stdafx.h"
#include "statci_new_test2.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#endif

// 唯一的应用程序对象

CWinApp theApp;

using namespace std;

struct stTest
{
int a;
int b;
char szTest[32];
stTest()
{
a = 1;
b = 2;
sprintf(szTest, "abc");
}
};

int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])
{
int nRetCode = 0;

// 初始化 MFC 并在失败时显示错误
if (!AfxWinInit(::GetModuleHandle(NULL), NULL, ::GetCommandLine(), 0))
{
// TODO: 更改错误代码以符合您的需要
_tprintf(_T("致命错误: MFC 初始化失败\n"));
nRetCode = 1;
}
else
{
// TODO: 在此处为应用程序的行为编写代码。
static stTest* p = new stTest;
printf("a = %d, b = %d, c = %s\n", p->a, p->b, p->szTest);

getchar();
}

return nRetCode;
}


那结果就不一样了,输出面板打印了内存泄露的信息:



经过测试发现:如果程序包含了<afxwin.h>,那么程序结束时会在输出面板打印内存泄露信息,否则就不打印了。。。

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: