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!

人工智能实验室
相关文章相关文章
  • 英国研发“杀生”机器人 通过生命体获取能量

    英国研发“杀生”机器人 通过生命体获取能量

  • 韩春雨称已能重复实验结果 近期将有消息公布

    韩春雨称已能重复实验结果 近期将有消息公布

  • 未来两年人工智能要怎么走?看这篇就够了

    未来两年人工智能要怎么走?看这篇就够了

  • 无人驾驶汽车如何改变城市生活?听听他们怎么说

    无人驾驶汽车如何改变城市生活?听听他们怎么说

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

据国外媒体报道,在过去两年内,聊天机器人(chatbot)、人工智能以及机器学习的研发和采用取得了巨大进展。许多初创公司正利用人工智能和...

霍金 视觉中国 图 英国著名物理学家霍金(Stephen Hawking)再次就人工智能(AI)发声,他认为:对于人类来说,强大AI的出现可能是最美妙的...

文|郑娟娟 今年,人工智能(AI) 60岁了。在AI60岁的时候,笔者想要介绍一下AI100,一个刚刚2岁的研究项目,但它的预设寿命是100年,甚至更长...

AlphaGo与李世石的人机大战,为大众迅速普及了人工智能的概念。 但对谷歌而言,除了下围棋,现在的人工智能进展到哪一步了?未来,人工智能...