background image

 AddTrack((DWORD)ptr, size, file, line); 
 return(ptr); 
 }; 
 inline void __cdecl operator delete(void *p) 
 { 
 RemoveTrack((DWORD)p); 
 free(p); 
 }; 
 #endif 
 另外,还需要用相同的方法来重载 new[]和 delete[]

 

操作符。这里就省略掉它们了。

 最后,我们需要提供一套函数 AddTrack()和 RemoveTrack()。我用 STL 来维护存储内存分

 

配记录的连接表。
 

 

这两个函数如下:

 typedef struct { 
 DWORD address; 
 DWORD size; 
 char file[64]; 
 DWORD line; 
 } ALLOC_INFO; 

 typedef list<ALLOC_INFO*> AllocList; 

 AllocList *allocList; 

 void AddTrack(DWORD addr, DWORD asize, const char *fname, DWORD lnum) 
 { 
 ALLOC_INFO *info; 

 if(!allocList) { 
 allocList = new(AllocList); 
 } 

 info = new(ALLOC_INFO); 
 info->address = addr; 
 strncpy(info->file, fname, 63); 
 info->line = lnum; 
 info->size = asize; 
 allocList->insert(allocList->begin(), info); 
 }; 

 void RemoveTrack(DWORD addr) 
 { 
 AllocList::iterator i;