重载New和Delete检测内存泄漏
来源:互联网 发布:淘宝欢乐逛如何使用 编辑:程序博客网 时间:2024/05/16 02:46
#include <iostream>#include <vector>#include <numeric>#include<algorithm>#include <stack>#include <string>#include <map>using namespace std;map<void*, pair<char*, int>> my_map;class A{public:int a = 1;};void * __cdecl operator new(unsigned int size, const char *file, int line){void* p = malloc(size);my_map[p] = pair<char*, int>(const_cast<char *>(file), line);return p;};void __cdecl operator delete(void *p){my_map.erase(p);free(p);};#define new new(__FILE__,__LINE__) //用__FILE__, __LINE__记录new的位置int main(){auto tmp = new A;cout<<tmp->a;delete tmp;return 0;}
感谢小木木提供的代码
在C/C++中指针给编码带来的极大的方便,但是同时由于分配的指针需要编程人员自行释放内存,因此容易造成内存泄漏,C++中自带的new/delete本身没有提供内存泄漏检测的功能,不过我们可以重载这两个函数来追踪内存的分配和释放,以此来检测程序是否出现了内存泄漏。算法的思想是在new一块内存时将该块内存的地址以及出现的文件和行号信息记录到一个map数据结构中,以内存地址作为key。释放该内存时将map中的该记录删除,最后程序退出时从map结构中输出那些没有被释放的内存信息。
http://blog.csdn.net/hzyong_c/article/details/5949314
http://www.cnblogs.com/pangxiaodong/archive/2011/08/29/2158136.html
http://blog.csdn.net/realxie/article/details/7437855
阅读全文
0 0
- 重载new和delete检测内存泄漏
- 重载New和Delete检测内存泄漏
- 如何检测内存泄漏——重载new和delete
- 如何检测内存泄漏——重载new和delete
- 如何检测内存泄漏——重载new和delete
- 如何检测内存泄漏——重载new和delete
- 如何检测内存泄漏——重载new和delete
- 如何检测内存泄漏——重载new和delete
- [转]如何检测内存泄漏——重载new和delete
- 如何检测内存泄漏——重载new和delet
- 重载全局new/delete实现内存检测
- 重载全局new/delete实现内存检测
- 重载new和delete来防止c++工程中内存泄漏
- 重载new和delete来防止c++工程中内存泄漏
- 重载new和delete来防止c++工程中内存泄漏
- New和delete的原理---如何在linux下检测内存泄漏
- 内存泄露打印new和delete重载
- 重载new和delete,处理内存溢出
- noip膜你赛day2第二题 小G的烦恼
- 分享一些ssm(springmvc+spring+mybatis)集成的demo
- C#中volatile的用法
- SQLI Labs 第四课(判断是否存在注入以及注入攻击)
- viewPager嵌套fragment的数据刷新
- 重载New和Delete检测内存泄漏
- 【Java笔记】在强制转换中理解动态绑定
- 除法取模和逆元
- 树莓派玩转3g模块
- JavaScript 的函数柯里化
- 手风琴下拉列表
- 1000 A+B
- 信号的表示和处理
- codeforces—— 758A —— oliday Of Equality