【面经笔记】内存泄漏检测
来源:互联网 发布:sql 全连接 编辑:程序博客网 时间:2024/06/07 15:03
参考:
http://www.cnblogs.com/juncheng/archive/2009/11/12/1602165.html
new/new[]表达式会首先调用operator new/new[]操作运算符函数开辟内存,再调用构造函数构造对象
而为了给操作运算符函数传递额外的参数:文件名与行号,需要使用定位new表达式(C++primer P729)
new(void ) type -> operator new(size_t,void )new(char*,int) type -> operator new(size_t,char* ,int )
定位new表达式一般用于placemen new:
http://www.cppblog.com/kongque/archive/2010/02/20/108093.html
重载operator new/delete/new[]/delete[] 四个运算操作符函数
使用map保存指针及分配它的代码所在位置信息,new中插入,delete中删除
#include <iostream>#include <vector>#include <numeric>#include<algorithm>#include <stack>#include <string>#include <map>using namespace std;class A{public: int a = 1;};#define debug_#ifdef debug_map<void*, pair<char*, int>> my_map;void * __cdecl operator new(unsigned int 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); cout << "new" << endl; return p;};void * __cdecl operator new[](unsigned int 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); cout << "new[]" << endl; return p;};void __cdecl operator delete(void *p){ if(my_map.erase(p)) cout << "delete" << endl; free(p);};void __cdecl operator delete[](void *p){ if(my_map.erase(p)) cout << "delete []" << endl; free(p);};#define new new(__FILE__,__LINE__)#endifint main(){ auto tmp_1 = new A; auto tmp_2 = new A[5]; //delete tmp_1; //delete[] tmp_2; return 0;}
阅读全文
0 0
- 【面经笔记】内存泄漏检测
- CRT检测内存泄漏
- 内存泄漏检测
- 内存泄漏检测
- Linux内存泄漏检测
- C++内存泄漏检测
- 内存泄漏检测
- vc++内存泄漏检测
- MFC 内存泄漏检测
- 内存泄漏检测
- 内存泄漏的检测
- 检测内存泄漏
- 内存泄漏检测
- 如何检测内存泄漏
- 内存泄漏检测
- 内存泄漏检测
- windows检测内存泄漏
- VS 内存泄漏检测
- Hibernate 所有缓存机制详解
- CodeForces
- E
- python web框架之 bobo的安装配置
- nginx 映射问题解决 和 跨域问题解决
- 【面经笔记】内存泄漏检测
- CNN浅析和历年ImageNet冠军模型解析
- sublime text3--js智能提示插件以及其他常用插件
- VS2013安装部署项目为安装包超详细
- API翻译:glEnableVertexAttribArray
- 三层架构 与 三层体系结构的 区别
- Azure Stack深入浅出1:谈Azure Stack在私有云/混合云生态中的定位
- .gitignore失效、git版本回退
- 网上结算(CO)产品代码路径