#include <stdio.h>
#include <iostream>
#include <vector>
#include <numeric>
#include<algorithm>
#include <stack>
#include <string>
#include <map>
using namespace std;
class A
{
public:
int a = 1;
};
map<void*, pair<char*, int> > my_map;
void * operator new(std::size_t size, const char *file, int line)
{
void* p = malloc(size);
pair<char*, int> tmp_2(const_cast<char *>(file), line);
pair<void*, pair<char*, int> > tmp(p, tmp_2);
my_map.insert(tmp);
printf("operator new : address = [%x], size = [%d], file = [%s], line = [%d]\n", p, size, file, line);
cout << "new" << endl;
return p;
};
void * operator new[](std::size_t size, const char *file, int line)
{
void* p = malloc(size);
pair<char*, int> tmp_2(const_cast<char *>(file), line);
pair<void*, pair<char*, int> > tmp(p, tmp_2);
my_map.insert(tmp);
printf("operator new : address = [%x], size = [%d], file = [%s], line = [%d]\n", p, size, file, line);
cout << "new[]" << endl;
return p;
};
void operator delete(void *p)
{
if(my_map.erase(p))
cout << "delete" << endl;
printf("delete address:%x\n", p);
free(p);
};
void operator delete[](void *p)
{
if(my_map.erase(p))
cout << "delete []" << endl;
printf("delete address:%x\n", p);
free(p);
};
#define new new(__FILE__,__LINE__)
int main()
{
void *tmp_1 = new A;
void *tmp_2 = new A[5];
int *arr = new int[20];
delete []arr;
delete tmp_1;
delete[] tmp_2;
return 0;
}
new 重载用于内存泄漏检测
最新推荐文章于 2024-08-15 05:02:54 发布