// 未釋放內(nèi)存空間.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include <windows.h>
#include <string>
#include <iostream>
// 使用CRT調(diào)試API
#include <crtdbg.h>
using namespace std;
// 將所有的內(nèi)存分配函數(shù)new替換成CRT提供的調(diào)試new
#ifdef _DEBUG
# define DEBUG_CLIENTBLOCK new(_CLIENT_BLOCK, __FILE__, __LINE__)
#else
# define DEBUG_CLIENTBLOCK
#endif
#ifdef _DEBUG
# define new DEBUG_CLIENTBLOCK
#endif
class CTestClass
{
public:
CTestClass(LPWSTR szName)
{
m_lpName = new wstring(szName);
}
~CTestClass()
{
}
void PrintName()
{
wcout << *m_lpName << endl;
}
private:
wstring *m_lpName;
};
HRESULT CreateTestClass(LPWSTR szName, CTestClass **ppObject)
{
*ppObject = new CTestClass(szName);
if ( (*ppObject) == NULL )
return E_FAIL;
else
return S_OK;
}
int _tmain(int argc, _TCHAR* argv[])
{
// 設(shè)置CRT調(diào)試API的報表輸出模式,將所有的錯誤、警告還有斷言都輸出到控制臺
_CrtSetReportMode( _CRT_WARN, _CRTDBG_MODE_FILE );
_CrtSetReportFile( _CRT_WARN, _CRTDBG_FILE_STDOUT );
_CrtSetReportMode( _CRT_ERROR, _CRTDBG_MODE_FILE );
_CrtSetReportFile( _CRT_ERROR, _CRTDBG_FILE_STDOUT );
_CrtSetReportMode( _CRT_ASSERT, _CRTDBG_MODE_FILE );
_CrtSetReportFile( _CRT_ASSERT, _CRTDBG_FILE_STDOUT );
CTestClass *pObject = NULL;
HRESULT hr = CreateTestClass(L"This is a Test", &pObject);
if ( hr != S_OK )
{
return -1;
}
else
{
pObject->PrintName();
// 檢查未釋放的內(nèi)存
_CrtDumpMemoryLeaks();
return 0;
}
}
|