void* malloc_hook(size_t size, const char* file, int line) {
void* p = malloc(size);
char buf[128] = { 0 };
sprintf(buf, "./mem/%p.mem", p); //用地址作为名字存文件,也可以存在外部数据库或者什么滴
FILE* fp = fopen(buf, "w");
fprintf(fp, "[+%s:%d]-->addr:%p,size:%ld\n", file, line,p,size);
fflush(fp);
fclose(fp);
return p;
}
void free_hook(void* p, const char* file, int line) {
char buf[128] = { 0 };
sprintf(buf, "./mem/%p.mem", p);
if (_unlink(buf)< 0) //判断是否存在这个地址的文件,存在删除,不存在抛异常
{
sprintf(buf, "error--[+%s:%d]-->addr:%p", file, line, p);
throw buf;
}
free(p);
}
void* operator new (size_t size, const char * filename, int lineno)
{
return operator new (size);
}
void operator delete(void* p, const char * filename, int lineno) {
operator delete (p);
}
#define malloc(size) malloc_hook(size, __FILE__, __LINE__)
#define free(p) free_hook(p, __FILE__, __LINE__)
#define new new(__FILE__, __LINE__)
#define delete(p) operator delete(p, __FILE__, __LINE__)
int main(int argc, char ** argv)
{
int * p = new int;
delete(p); //必须这样子删除,否则报错
std::cout << "Hello World!" << std::endl;
return 0;
}
malloc free new delete重载 调试
最新推荐文章于 2023-02-03 17:03:36 发布