C++内存泄露检测
来源:互联网 发布:跑跑卡丁车淘宝 编辑:程序博客网 时间:2024/04/28 12:34
RT,重载new和delete,在里面加上自己的东东,申请内存的时候存放结果,释放的时候标记下,最后进行统计,未被标记的就是泄露掉的;由于这里记录的是内存地址,所以可以接着释放【程序内未处理】,机制类似Java的GC。
#include <iostream>#include <cstdlib>#include <cstdio>#include <assert.h>#include <crtdbg.h>#include <stack>#include <vector>
#include <pzjay_cpy>#include <new>using namespace std;class Memory{public:Memory(void* addr = NULL){this ->addr = addr;this ->used = true;}~Memory(){delete addr;}void* addr;bool used;};class Cls{int s;public:Cls(){}~Cls(){}};//vector <void*> ptr(3);//STL声明的时候会调用new,一次性申请需要大小的内存,这里是3 * 4 = 12 bytesvoid* ary[100];static int cnt = 0;//重载new[]void * operator new[](size_t count) _THROW1(std::bad_alloc){ printf("new[], 总大小为:\t%d\n", count);return (operator new(count));}//重载newvoid* operator new(size_t size) throw(bad_alloc){printf("new:\t%d Byte\n",size);void* m= malloc(size);if(!m) puts("out of memory");printf("new @:\t0x%0x\n", (int*)m);ary[cnt ++] = m;return m;}//重载delete[]void operator delete[](void* cnt) _THROW1(std::bad_alloc){/*数组内存布局|num|var[0]|var[1]|var[2]|var[3]|........|var[num-1]|申请数组,第一个位置放置的是数组大小,以方便delete[]在删除数组的时候判断什么时候停止*/printf("delete[], 总大小为:\t%d\n", *(int*)cnt);return (operator delete(cnt));}//重载delete,要加__CRTDECL,否则不让重载void __CRTDECL operator delete(void* m) throw(){printf("delete @:\t0x%0x\n",(int*)m);for(int i = 0; i < cnt; ++ i){if(0 == (int*)m - (int*)ary[i]){ary[i] = NULL;break;}}free(m);}void memCheck(){for(int i = 0; i < cnt; ++ i){if(NULL != ary[i])printf("memory leak @:\t0x%0x\n", ary[i]);}}int main(int argc, char* argv[]){{new int;}char* ch = new char;int* p = new int(7);delete p;Cls* s = new Cls;Cls* sa = new Cls[14];delete []sa;int* pi=new int[3];printf("\nmemory check...\n\n");memCheck();return 0;}
- C 检测内存泄露
- c/c++ 内存泄露检测
- C/C++ 内存泄露检测
- C++ 检测内存泄露
- ★【C/C++】概念:内存泄露与内存泄露检测
- c/c++内存泄露及检测
- 如何检测C/C++程序内存泄露
- C/C++ 、VS、linux 内存泄露检测
- C/C++ 内存泄露与检测
- Linux C程序内存泄露检测
- C语言内存泄露检测--Memwatch
- Linux C自定义内存泄露检测
- Linux C程序内存泄露检测
- linux C内存泄露检测实现及内存泄露检测的一般方法
- linux C内存泄露检测实现及内存泄露检测的一般方法
- C/C++内存泄露及内存检测之我见
- C/C++中内存释放及内存泄露的检测
- 内存泄露检测方法
- Oracle Pipelined Table Functions 与 性能优化 说明
- java 安全机制
- 编程经典好书分类
- oracle 全文检索
- Swing图形解面Table学习_TableModelEvent
- C++内存泄露检测
- SLES 10 SP3 x86_64 硬盘安装
- LOTUS 学习技巧 连载
- io流
- 数据即服务
- mysql复习与整理 之一 数据库的创建,修改,备份,和恢复
- 程序员人生之路
- 最简单的手工写增删改查的代码
- 解析Android消息处理机制:Handler/Thread/Looper & MessageQueue