b2科目四模拟试题多少题驾考考爆了怎么补救
b2科目四模拟试题多少题 驾考考爆了怎么补救

C ++内存泄漏检测(调试工具)

电脑杂谈  发布时间:2020-07-30 23:08:23  来源:网络整理

c  内存检测工具_c++内存泄漏检测_wpf 内存 检测

C ++内存泄漏检测(调试工具)

时间: 2020-07-22

c  内存检测工具_wpf 内存 检测_c++内存泄漏检测

本文向所有人介绍C ++内存泄漏检测(调试工具),主要包括C ++内存泄漏检测(调试工具)使用示例,应用技能c 内存检测工具,基本知识点摘要和注意事项. 它具有一定的参考价值c 内存检测工具,需要朋友可以参考.

理论工具的作用调试和调试常用的宏

wpf 内存 检测_c  内存检测工具_c++内存泄漏检测

__FILE__            //所在的文件
__FUNCTION__        //函数功能
__FUNCDNAME__       //函数名
__LINE__            //在第几行
__DATE__            //产生的日期
__TIME__            //产生的时间

代码实现MemoryCheck.h

c  内存检测工具_c++内存泄漏检测_wpf 内存 检测

#pragma once
#ifndef __MEMORY_CHECK_H__
#define __MEMORY_CHECK_H__
#ifdef _DEBUG
void* operator new(size_t size, const char* filename, const char* funame, int line);
void* operator new[](size_t size, const char* filename, const char* funame, int line);
void operator delete(void* pMem);
void operator delete[](void* pMem);
#ifndef __USE_MEM_CHECK__
#define __USE_MEM_CHECK__
#define new new(__FILE__,__FUNCTION__,__LINE__)
#endif // !__USE_MEM_CHECK__
#endif // _DEBUG
#endif // !__MEMORY_CHECK_H__

MemoryCheck.cpp

c++内存泄漏检测_c  内存检测工具_wpf 内存 检测

#include<map>
#include<iostream>
#include<Windows.h>
#define __USE_MEM_CHECK__
#include"MemoryCheck.h"
typedef struct stMemInfo
{
	void* pMem;
	size_t size;
	int line;
	char funcname[256];
	char filename[256];
}MEMINFO,*LPMEMINFO;
std::map<void*, LPMEMINFO>g_MemMap;//存储内存分配的信息
typedef std::map<void*, LPMEMINFO>MEMMAP;
typedef MEMMAP::iterator MEMMAPItr;
class CMemMgr
{
public:
	static CMemMgr& Instance()
	{
		static CMemMgr instance;
		return instance;
	}
	void* Push(LPMEMINFO pInfo)
	{
		g_MemMap[pInfo->pMem] = pInfo;
		return pInfo->pMem;
	}
	void Pop(void* pMem)
	{
		MEMMAPItr it = g_MemMap.find(pMem);
		if (it != g_MemMap.end())
		{
			free(pMem);
			free(it->second);
			g_MemMap.erase(it);
		}
	}
	~CMemMgr()
	{
		if (!g_MemMap.empty())
		{
			OutputDebugStringA("\n----------------------------------发现内存泄露信息----------------------------------\n\n");
			char buf[256] = {};
			int count = 0;
			for (auto it:g_MemMap)
			{
				sprintf_s(buf, "【内存泄漏警告 %d 】 文件%s,第%d行的函数%s中泄漏了%d个字节的内存\n",
					count++,
					it.second->filename,
					it.second->line,
					it.second->funcname,
					it.second->size);
				OutputDebugStringA(buf);
				free(it.second->pMem);
				free(it.second);
			}
			g_MemMap.clear();
			OutputDebugStringA("\n-------------------------------内存泄漏检测结束----------------------------------\n\n");
		}
	}
private:
	CMemMgr() {};
	CMemMgr& operator=(const CMemMgr&) = delete;
	CMemMgr(const CMemMgr&) = delete;
};
void* operator new(size_t size, const char* filename, const char* funcname, int line)
{
	LPMEMINFO pInfo=(LPMEMINFO)malloc(sizeof(MEMINFO));
	pInfo->size = size;
	pInfo->line = line;
	pInfo->pMem = malloc(size);
	strcpy_s(pInfo->filename, filename);
	strcpy_s(pInfo->funcname, funcname);
	return CMemMgr::Instance().Push(pInfo);
}
void* operator new[](size_t size, const char* filename, const char* funcname, int line)
{
	return operator new(size, filename, funcname, line);
}
void operator delete(void* pMem)
{
	CMemMgr::Instance().Pop(pMem);
}
void operator delete[](void* pMem)
{
	operator delete(pMem);
}

main.cpp

#include<iostream>
#include"MemoryCheck.h"
int main()
{
	int* p = new int;
	int* p2 = new int[5];
	system("pause");
	return 0;
}

注意


本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/ruanjian/article-289294-1.html

    相关阅读
      发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

      • 何兆
        何兆

        那巴萨尔就活过来

      • 日高奈留美
        日高奈留美

        管股票的人肯定可以发财

      • 陈申公
        陈申公

        采取撞击战术最合适

      热点图片
      拼命载入中...