-
Notifications
You must be signed in to change notification settings - Fork 0
/
MemCheck.cpp
82 lines (82 loc) · 1.95 KB
/
MemCheck.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
//#include <cstdio>
//#include <cstdlib>
//#include <cassert>
//#include <cstddef>
//#include "MemChek.h"
//using namespace std;
//#undef new
//bool traceFlag=true;
//bool activeFlag=false;
//namespace{
// struct Info{
// void *ptr;
// const char *file;
// long line;
// };
// const size_t MAXPTRS=10000u;
// Info memMap[MAXPTRS];
// size_t nptrs=0;
// int findPtr(void *p){
// for(size_t i=0;i<nptrs;i++)
// if(memMap[i].ptr==p) return i;
// return -1;
// }
// void delPtr(void *p){
// int pos=findPtr(p);
// assert(pos>=0);
// for(size_t i=pos;i<nptrs-1;i++)
// memMap[i]=memMap[i+1];
// --nptrs;
// }
// struct Sentinel{
// ~Sentinel(){
// if(nptrs>0){
// printf("leaked memory at:\n");
// for (size_t i=0;i<nptrs;i++)
// {
// printf("\t%p(file:%s,line %ld)\n",memMap[i].ptr,memMap[i].file,memMap[i].line);
// }
// }
// else printf("No user memory leaks!\n");
// }
// };
// Sentinel s;//发现内存泄露
//};
// void * operator new (size_t siz,const char*file,long line){
// void *p=malloc(siz);
// if(activeFlag){
// if(nptrs==MAXPTRS) {
// printf("memory map too small(increase MaxPTR)\n");
// exit(1);
// }
// memMap[nptrs].ptr=p;
// memMap[nptrs].file=file;
// memMap[nptrs].line=line;
// ++nptrs;
// }
// if(traceFlag){
// printf("Alloctated %u bytes at address %p\n",siz,p);//%p 无符号指针
// printf("(file:%s,line:%d)\n",file,line);
// }
// return p;
//
// }
// void *operator new[](size_t siz,const char*file,long line){
// return operator new(siz,file,line);
//
// }
// void operator delete(void *p){
// if(findPtr(p)>=0){
// free(p);
// assert(nptrs>0);
// delPtr(p);
// if(traceFlag) printf("deleted memory at address %p\n",p);
//
// }
// else if(!p&&activeFlag)printf("Attempt to delete unkonwn pointer :%p\n",p);
// }
// void operator delete[](void *p){
// operator delete(p);
// }
//
//