stl map 崩溃crash
我用了stl map,map <int, struct> 这个结构,
我自己写了个小程序测试没有问题,就是对这个map进行插入,查找,删除.
但是用在我们的工程里面,就崩溃了.完全一样的代码,也是一样的库支持.
#include <windows.h>
#include <iostream>
#include <string>
#include <map>
#include <stdarg.h>
using namespace std;
typedef struct _MEM_LEAK_INFO
{
char * file_name;
size_t line;
size_t alloc_size;
size_t alloc_times;
}MEM_LEAK_INFO;
typedef struct _MEM_RECORD_HEADER
{
size_t alloc_size;
char* file_name;
size_t line;
}MEM_RECORD_HEADER;
std::map<size_t, MEM_LEAK_INFO> map_mem_leak_record;
void* operator new(size_t size, char* file_name, size_t line);
#define NEW new(__FILE__, __LINE__)
void* operator new(size_t size, char* file_name, size_t line)
{
MEM_RECORD_HEADER header;
header.alloc_size = size;
header.file_name = file_name;
header.line = line;
MEM_RECORD_HEADER *ptr = (MEM_RECORD_HEADER*)malloc(size+sizeof(MEM_RECORD_HEADER));
ptr->alloc_size = size;
ptr->file_name = file_name;
ptr->line = line;
size_t temp = (size_t)ptr;
if (ptr)
{
std::map<size_t, MEM_LEAK_INFO>::iterator it = map_mem_leak_record.find(temp); //这个地方挂了,工程里面
if( it != map_mem_leak_record.end() )
{
it->second.alloc_size += size;
it->second.alloc_times += 1;
}
else
{
MEM_LEAK_INFO mem_info;
mem_info.file_name = file_name;
mem_info.line = line;
mem_info.alloc_size = size;
mem_info.alloc_times = 1;
//map_mem_leak_record[temp] = mem_info;
map_mem_leak_record.insert(pair<size_t,MEM_LEAK_INFO>(temp, mem_info));
}
return ptr+1;
}
else
{
return NULL;
}
}
int _tmain(int argc, _TCHAR* argv[])
{
MEM_RECORD_HEADER* p = NEW(MEM_RECORD_HEADER);
}