heaplog

 1 #ifdef _DEBUG
 2 
 3 #include <stdio.h>
 4 #include <stdlib.h>
 5 #include <string.h>
 6 
 7 #define _BUF_SIZE 128
 8 
 9 static const char* g_FileName = "HeapLog.txt";
10 static const char* g_AllocateFail = "分配失败 --- 当前情况(分配:%d, 释放:%d)\x0a";
11 static const char* g_AllocateOK = "分配成功(地址:%p, 大小:%d) --- 当前情况(分配:%d, 释放:%d)\x0a";
12 static const char* g_FreeOK = "释放成功(地址:%p) --- 当前情况(分配:%d, 释放:%d)\x0a";
13 static int g_AllocateNum = 0;
14 static int g_FreeNum = 0;
15 static char g_Buf[_BUF_SIZE];
16 
17 void* operator new(size_t s)
18 {
19     void* p = malloc(s);
20 
21     FILE* pF;
22     fopen_s(&pF, g_FileName, "a");
23 
24     if (!p)
25         sprintf_s(g_Buf, _BUF_SIZE, g_AllocateFail, g_AllocateNum, g_FreeNum);
26     else
27     {
28         g_AllocateNum++;
29         sprintf_s(g_Buf, _BUF_SIZE, g_AllocateOK, p, s, g_AllocateNum, g_FreeNum);
30     }
31 
32     fwrite(g_Buf, sizeof(char), strlen(g_Buf), pF);
33     fflush(pF);
34     fclose(pF);
35     return p;
36 }
37 
38 void operator delete(void* p)
39 {
40     free(p);
41     g_FreeNum++;
42 
43     FILE* pF;
44     fopen_s(&pF, g_FileName, "a");
45 
46     sprintf_s(g_Buf, _BUF_SIZE, g_FreeOK, p, g_AllocateNum, g_FreeNum);
47     fwrite(g_Buf, sizeof(char), strlen(g_Buf), pF);
48     fflush(pF);
49     fclose(pF);
50 }
51 
52 void* operator new[](size_t s)
53 {
54     return operator new(s);
55 }
56 
57 void operator delete[](void* p)
58 {
59     operator delete(p);
60 }
61 
62 #endif

 

posted @ 2013-06-26 22:39  herizai  阅读(324)  评论(0编辑  收藏  举报