thomas的动力火车 2015-10-16 00:59 采纳率: 33.3%
浏览 1679

重载new 运算符后,把内存分配插入map 时,感觉像死循环了,然后产生了一个core,不得其解?

#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;
}

  • 写回答

5条回答 默认 最新

  • yangbo50304 2015-10-16 01:14
    关注

    map的insert方法会调用到你重写的new方法,new 一个pair对象,所以一直是死循环调用了。
    如果你想要重写new方法的话,最好将new 重写到类的方法中去,这样就不会影响其他类的new了。

    评论

报告相同问题?