C++简单内存泄漏检查机制实现

  次阅读 来源:互联网(转载协议) 2016-01-26 10:42 我要评论(0)

这里是一个简单的内存泄漏自动检查机制。只适用于单线程情况下。工作原理就是将已经分配的内存用一个双向链表串联起来,释放内存时从链表里删除。在程序退出时,将链表中未释放的内存打印出来。同时在内存块中保存文件名和行号,用于定位内存分配地址。

C++简单内存泄漏检查机制实现 三联教程

001 // placement_new.cpp : Defines the entry point for the console application.

002 //

003

004 #include "stdafx.h"

005 #include

006 #include

007

008 #define ASSERT assert

009 char buff[1024];

010

011 using namespace std;

012

013 struct MEMORY_TAG

014 {

015 int nSize;

016 const char* szFile;

017 int nLine;

018 MEMORY_TAG* pPrev;

019 MEMORY_TAG* pNext;

020 };

021

022 MEMORY_TAG g_header = {0, 0, 0, 0, 0};

023 // 打印出所有未释放的内存

024 void DumpUnAllocatedMem()

025 {

026 for(MEMORY_TAG* pEntry = g_header.pNext; pEntry; pEntry = pEntry->pNext)

027 {

028 printf("%s(%d) : leak %d bytes ", pEntry->szFile ? pEntry->szFile : "", pEntry->nLine, pEntry->nSize);

029 }

030 }

031 // 统计已经分配的内存块数和字节数

032 int C++ountOfAllocatedMem(void* pnSize= NULL)

033 {

034 int nCount = 0;

035 size_t allocated = 0;

036 for(MEMORY_TAG* pEntry = g_header.pNext; pEntry; pEntry = pEntry->pNext)

037 {

038 allocated += pEntry->nSize;

039 nCount++;

040 }

041 printf("%d count, %d total ", nCount, allocated);

042 return nCount;

043 }

044

045 // 实现一个全局operator new可以有文件名和行号作为参数

046 void* operator new(size_t size, const char* pszFile, int line)

047 {

048 size_t nRealSize = size + sizeof(MEMORY_TAG);

049 MEMORY_TAG* pTag = (MEMORY_TAG*)malloc(nRealSize);

050

051 pTag->nSize = nRealSize;

052 pTag->szFile = pszFile;

053 pTag->nLine = line;

054 // 插入队列头部

055 if (g_header.pNext)

056 {

本站部分文章来源于网络以及网友投稿,本站只负责对文章进行整理、排版、编辑,是出于传递更多信息之目的,并不意味着赞同其观点或证实其内容的真实性。如果您有什么意见或建议,请联系QQ28-1688-302!

人工智能实验室
相关文章相关文章
  • 长虹新款智能语音空调,告诉你空调也能玩Siri

    长虹新款智能语音空调,告诉你空调也能玩Siri

  • 品友互动为Digital Travel APAC2018 唯一受邀中国AI企业

    品友互动为Digital Travel APAC2018 唯一受邀中国AI企业

  • 第一批国家重点研发计划公布,旷视科技开启“五年行动”

    第一批国家重点研发计划公布,旷视科技开启“五年行动”

  • 让AI触手可及  Qualcomm携手创通联达推出全新终端侧AI开发套件

    让AI触手可及 Qualcomm携手创通联达推出全新终端侧AI开发套件

网友点评网友点评
阅读推荐阅读推荐

据外媒报道,STEER打造了首款完全自动驾驶停车技术,旨在使常规车辆转变为无人驾驶车辆。STEER的首款技术应用是4级自动驾驶及网络安全停车...

近日,美国软性机器抓手制造商 Soft Robotics 宣布,获得 2000 万美元的融资,本轮投资者包括 Scale Venture Partners,Calibrate Ventures...

据外媒报道,加州车管局发布了《2017自动驾驶脱离报告(California Autonomous Vehicle Disengagement Reports)》,其中谈及了脱离的具体...

用人机语音交互,来解决智能家居适老的问题;通过家庭门禁与安防套件、空气净化套件、可燃气体与有害气体监控套件等相互联动,在不同生活情...