#include
#include
#include
#include
#include
#include
#include
#include
using namespace std;
typedef map GDB_MAP;
GDB_MAP g_map;
int cnt = 1;
#define SAFE_NEW new
void *operator new(size_t size)
//void *do_new(size_t size)
{
cout << "operator new called, " <<"file:" << FILE << "line=" << LINE<< endl;
void *p = NULL;
p = malloc(size);
memset(p, 0, sizeof(size));
g_map.insert(std::pair(p, cnt)); //为什么出错在这里??
//如果不重载new,则这个insert 就没问题
return p;
}
void operator delete(void *p)
//void do_delete(void *p)
{
GDB_MAP ::iterator iter;
cout << "operator delete called" << endl;
#if 1
iter = g_map.find(p);
if(iter == g_map.end())
{
cout << "fail to find the mem"<< endl;
return;
}
g_map.erase(iter);
#endif
free(p);
p = NULL;
}
int main(int argc, char *argv[])
{
int *pa = (int *)new int;
cout << "pa = "<< pa << endl;
delete(pa);
cout << "pa = "<< pa << endl;
return 0;
}