📄 memleak.cpp
字号:
// memLeak.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include <celog.h>
#define MAX_LOADSTRING 100
// Definitions for our debug zones
#define ZONEID_INIT 0
#define ZONEID_TRACE 1
#define ZONEID_MEMORY 2
#define ZONEID_RSVD3 3
#define ZONEID_RSVD4 4
#define ZONEID_RSVD5 5
#define ZONEID_RSVD6 6
#define ZONEID_RSVD7 7
#define ZONEID_RSVD8 8
#define ZONEID_RSVD9 9
#define ZONEID_RSVD10 10
#define ZONEID_RSVD11 11
#define ZONEID_RSVD12 12
#define ZONEID_RSVD13 13
#define ZONEID_WARN 14
#define ZONEID_ERROR 15
// These masks are useful for initialization of dpCurSettings
#define ZONEMASK_INIT (1<<ZONEID_INIT)
#define ZONEMASK_TRACE (1<<ZONEID_TRACE)
#define ZONEMASK_MEMORY (1<<ZONEID_MEMORY)
#define ZONEMASK_RSVD3 (1<<ZONEID_RSVD3)
#define ZONEMASK_RSVD4 (1<<ZONEID_RSVD4)
#define ZONEMASK_RSVD5 (1<<ZONEID_RSVD5)
#define ZONEMASK_RSVD6 (1<<ZONEID_RSVD6)
#define ZONEMASK_RSVD7 (1<<ZONEID_RSVD7)
#define ZONEMASK_RSVD8 (1<<ZONEID_RSVD8)
#define ZONEMASK_RSVD9 (1<<ZONEID_RSVD9)
#define ZONEMASK_RSVD10 (1<<ZONEID_RSVD10)
#define ZONEMASK_RSVD11 (1<<ZONEID_RSVD11)
#define ZONEMASK_RSVD12 (1<<ZONEID_RSVD12)
#define ZONEMASK_RSVD13 (1<<ZONEID_RSVD13)
#define ZONEMASK_WARN (1<<ZONEID_WARN )
#define ZONEMASK_ERROR (1<<ZONEID_ERROR)
#ifdef DEBUG
// These macros are used as the first arg to DEBUGMSG
#define ZONE_INIT DEBUGZONE(ZONEID_INIT)
#define ZONE_TRACE DEBUGZONE(ZONEID_TRACE)
#define ZONE_MEMORY DEBUGZONE(ZONEID_MEMORY)
#define ZONE_RSVD3 DEBUGZONE(ZONEID_RSVD3)
#define ZONE_RSVD4 DEBUGZONE(ZONEID_RSVD4)
#define ZONE_RSVD5 DEBUGZONE(ZONEID_RSVD5)
#define ZONE_RSVD6 DEBUGZONE(ZONEID_RSVD6)
#define ZONE_RSVD7 DEBUGZONE(ZONEID_RSVD7)
#define ZONE_RSVD8 DEBUGZONE(ZONEID_RSVD8)
#define ZONE_RSVD9 DEBUGZONE(ZONEID_RSVD9)
#define ZONE_RSVD10 DEBUGZONE(ZONEID_RSVD10)
#define ZONE_RSVD11 DEBUGZONE(ZONEID_RSVD11)
#define ZONE_RSVD12 DEBUGZONE(ZONEID_RSVD12)
#define ZONE_RSVD13 DEBUGZONE(ZONEID_RSVD13)
#define ZONE_WARN DEBUGZONE(ZONEID_WARN )
#define ZONE_ERROR DEBUGZONE(ZONEID_ERROR)
#endif
DBGPARAM dpCurSettings = {
TEXT("MemLeak"), {
TEXT("Init"),TEXT("Trace Fn( );"),TEXT("Memory"),TEXT(""),
TEXT(""),TEXT(""),TEXT(""),TEXT(""),
TEXT(""),TEXT(""),TEXT(""),TEXT(""),
TEXT(""),TEXT(""),TEXT(""),TEXT("")},
// By default, turn on the zones for init and errors.
ZONEMASK_INIT
};
DWORD WINAPI MemoryThread(LPVOID lpParameter);
void AllocateMemory( );
void FreeMemory( );
void StartAllocation( );
void UseMemory( );
MEMORYSTATUS g_MemStatus;
HLOCAL g_tcTemp,g_tc_Temp;
DWORD dwThreadID;
TCHAR szMessage[256];
int WINAPI main (HINSTANCE hInstance, HINSTANCE hInstPrev, LPWSTR pCmdLine, int nCmdShow)
{
OutputDebugString(L"leakApp Starting\n");
DEBUGREGISTER(NULL); // Register the debug zones
StartAllocation( );
while(true) {
Sleep(1000);
}
return 0;
}
void StartAllocation( )
{
g_tcTemp=NULL;
g_tc_Temp=NULL;
OutputDebugString(L"Creating Thread...\n");
CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)MemoryThread,(LPVOID)0,0,&dwThreadID);
}
DWORD WINAPI MemoryThread(LPVOID lpParameter)
{
while(TRUE) {
Sleep(500);
DEBUGMSG (ZONE_TRACE, (TEXT("--------------------------------------------\n")));
AllocateMemory( );
UseMemory( );
FreeMemory( );
}
}
void AllocateMemory( )
{
DEBUGMSG (ZONE_TRACE, (TEXT("Enter - AllocateMemory( ) Function\n")));
DEBUGMSG (ZONE_MEMORY, (TEXT("Check GlobalMemoryStatus( )\n")));
memset(&g_MemStatus,0x00,sizeof(g_MemStatus));
g_MemStatus.dwLength=sizeof(g_MemStatus);
GlobalMemoryStatus(&g_MemStatus);
DEBUGMSG (ZONE_MEMORY, (TEXT("Memory Load %d%%\n"),g_MemStatus.dwMemoryLoad));
CELOGDATA(TRUE, CELID_RAW_LONG, &g_MemStatus.dwMemoryLoad, (WORD) (sizeof(DWORD)), 1, CELZONE_MISC);
if (g_MemStatus.dwMemoryLoad < 60) {
DEBUGMSG (ZONE_MEMORY, (TEXT("Allocate TCHAR *2048 (4096 UNICODE Characters)\n")));
g_tcTemp=LocalAlloc(LPTR,(2048*sizeof(TCHAR)));
DEBUGMSG (ZONE_MEMORY, (TEXT("Pointer 0x%lx\n"),g_tcTemp));
} else {
DEBUGMSG (ZONE_MEMORY, (TEXT("Memory Load too high - not allocating memory\n"),g_MemStatus.dwMemoryLoad));
}
DEBUGMSG (ZONE_TRACE, (TEXT("Leave - AllocateMemory( ) Function\n")));
}
void FreeMemory( )
{
DEBUGMSG (ZONE_TRACE, (TEXT("Enter - FreeMemory( ) Function\n")));
DEBUGMSG (ZONE_MEMORY, (TEXT("Free Pointer 0x%lx\n"),g_tc_Temp));
LocalFree(g_tc_Temp);
DEBUGMSG (ZONE_TRACE, (TEXT("Leave - FreeMemory( ) Function\n")));
}
void UseMemory( )
{
DEBUGMSG (ZONE_TRACE, (TEXT("Enter - UseMemory( ) Function\n")));
DEBUGMSG (ZONE_MEMORY, (TEXT("Do Something Interesting here.\n")));
DEBUGMSG (ZONE_TRACE, (TEXT("Leave - UseMemory( ) Function\n")));
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -