生活随笔
收集整理的這篇文章主要介紹了
实现内存检测工具
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
思路就是覆蓋原有的malloc和free函數(shù),并記錄內(nèi)存申請和釋放情況
struct MEM_INFO
{int m_addr;int m_size;char m_strFile[1024];int m_nLine;
};hash_map<int, MEM_INFO> hstbl;void* xmalloc(unsigned int size, const char* strFile, int nLine)
{void* pRet = malloc(size);MEM_INFO info;info.m_addr = (int)pRet;info.m_size = size;strcpy(info.m_strFile, strFile);info.m_nLine = nLine;hstbl[info.m_addr] = info;return pRet;
}void xfree(void* p)
{hash_map<int, MEM_INFO>::iterator it = hstbl.find((int)p);if(it == hstbl.end()) return;free(p);hstbl.erase(it);
}#define malloc(x) xmalloc(x, __FILE__, __LINE__)//調(diào)用malloc的文件以及對應(yīng)的行
#define free(x) xfree(x)void PrintLeak()
{hash_map<int, MEM_INFO>::iterator it = hstbl.begin();for (; it != hstbl.end(); it++){cout<<"Memory leak at File: "<<it->second.m_strFile<<" line: "<<it->second.m_nLine<<" address: "<<it->second.m_nLine<<" size: "<<it->second.m_size<<endl;cout<<"******************************************************************"<<endl;}
}void test()
{void* p = malloc(sizeof(int));void* q = malloc(sizeof(int));free(p);PrintLeak();
}
總結(jié)
以上是生活随笔為你收集整理的实现内存检测工具的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。