内存泄漏查找c++ new delete
来源:互联网 发布:米思米软件pan 编辑:程序博客网 时间:2024/05/06 10:23
#include <iostream>#include <stdlib.h>struct MemIns{ void *pMem; int m_nSize; char m_szFileName[256]; int m_nLine; MemIns *pNext;};class MemManager{public: MemManager(); ~MemManager();private: MemIns *m_pMemInsHead; int m_nTotal;public: static MemManager* GetInstance(); void Append(MemIns *pMemIns); void Remove(void *ptr); void Dump(); };void *operator new(size_t size, const char*szFile, int nLine);void operator delete(void*ptr, const char*szFile, int nLine);void operator delete(void*ptr);void *operator new[] (size_t size, const char*szFile, int nLine);void operator delete[](void*ptr, const char*szFile, int nLine);void operator delete[](void *ptr);
#include"memchecker.h"#include<stdio.h>#include<malloc.h>#include<string.h>MemManager::MemManager(){ m_pMemInsHead=NULL; m_nTotal=NULL;}MemManager::~MemManager(){}void MemManager::Append(MemIns *pMemIns){ pMemIns->pNext=m_pMemInsHead; m_pMemInsHead = pMemIns; m_nTotal+= m_pMemInsHead->m_nSize;}void MemManager::Remove(void *ptr){ MemIns * pCur = m_pMemInsHead; MemIns * pPrev = NULL; while(pCur) { if(pCur->pMem ==ptr) { if(pPrev) { pPrev->pNext =pCur->pNext; } else { m_pMemInsHead =pCur->pNext; } m_nTotal-=pCur->m_nSize; free(pCur); break; } pPrev = pCur; pCur = pCur->pNext; }}void MemManager::Dump(){ MemIns *pp = m_pMemInsHead; while(pp) { printf( "File is %s\n", pp->m_szFileName ); printf( "Size is %d\n", pp->m_nSize ); printf( "Line is %d\n", pp->m_nLine ); pp = pp->pNext; }}void PutEntry(void *ptr,int size,const char*szFile, int nLine){ MemIns * p = (MemIns *)(malloc(sizeof(MemIns))); if(p) { strcpy(p->m_szFileName,szFile); p->m_nLine = nLine; p->pMem = ptr; p->m_nSize = size; MemManager::GetInstance()->Append(p); }}void RemoveEntry(void *ptr){ MemManager::GetInstance()->Remove(ptr);}void *operator new(size_t size,const char*szFile, int nLine){ void *ptr = malloc(size); PutEntry(ptr,size,szFile,nLine); return ptr;}void operator delete(void *ptr){ RemoveEntry(ptr); free(ptr);}void operator delete(void*ptr,const char *file, int line){ RemoveEntry(ptr); free(ptr);}void*operator new[] (size_t size,const char* szFile,int nLine){ void * ptr = malloc(size); PutEntry(ptr,size,szFile,nLine); return ptr;}void operator delete[](void *ptr){ RemoveEntry(ptr); free(ptr);}void operator delete[](void*ptr,const char*szFile,int nLine){ RemoveEntry(ptr); free(ptr);}#define new new(__FILE__,__LINE__)MemManager m_memTracer;MemManager*MemManager::GetInstance(){ return &m_memTracer;} int main(void){ int *plen =new int ; *plen=10; delete plen; char *pstr=new char[35]; strcpy(pstr,"hello memory leak"); m_memTracer.Dump(); return 0;}
运行结果
[root@test memcheck]# ./memcheck File is memchecker.cppSize is 35Line is 148
0 0
- 内存泄漏查找c++ new delete
- C++ new、delete、内存泄漏
- 重载new和delete检测内存泄漏
- c++ new/delete [],内存泄漏,动态数组
- 重载New和Delete检测内存泄漏
- [转]C++中的内存管理(new、delete、内存泄漏)
- C++中的内存管理(new、delete、内存泄漏)
- C++中的内存管理(new、delete、内存泄漏)
- C++中的内存管理(new、delete、内存泄漏)
- C++中的内存管理(new、delete、内存泄漏)
- C++中的内存管理(new、delete、内存泄漏)
- 【C++】动态内存管理(new,delete,new[],delete[])
- 如何检测内存泄漏——重载new和delete
- 如何检测内存泄漏——重载new和delete
- 如何检测内存泄漏——重载new和delete
- 如何检测内存泄漏——重载new和delete
- 如何检测内存泄漏——重载new和delete
- 如何检测内存泄漏——重载new和delete
- 第五周项目一-三角形类
- 单机session共享问题的解决
- 第五周项目3
- Hadoop基础教程之搭建开发环境及编写Hello World
- hdoj 3501
- 内存泄漏查找c++ new delete
- 初识commonjs
- FragmentPagerAdapter与FragmentStatePagerAdapter区别
- HDU 1181
- 第五周项目1-三角形类雏形(2)
- 时间类 (内联成员函数)
- 第6周项目2(1)画出变量占用的内存及值得变化
- 第六周项目2-带武器的游戏角色
- php生成mysql数据字典