如何预防和检测内存泄漏

来源:互联网 发布:怎么清除手机所有数据 编辑:程序博客网 时间:2024/05/10 06:11

预防和检测内存泄漏的方法:
1. 良好的代码规范
2. c++可以利用 一些语言特性 auto_ptr 或者 将资源封装在对象里
3. c 可以用 gc 库 GC_MALLOC 实现gabage collector
4. 一些优秀的 诊断软件 bound checker (VC) valgrind (GCC)

 

 

另外用以下方法,当有内存泄漏时,可以在调试时看到输出信息。

 

DebugNew.h

C/C++ code

#ifndef __DEBUGNEW_H_33164B60_A660_4B88_AEA3_270C97F24B12_INCLUDED__
#define __DEBUGNEW_H_33164B60_A660_4B88_AEA3_270C97F24B12_INCLUDED__


#ifdef __cplusplus

#ifdef _DEBUG

#include
<crtdbg.h>

// Overload operator new
inline void * __cdecl operator new(size_t nSize, const char * lpszFileName, int nLine)
{
int nFlag = _CrtSetDbgFlag(_CRTDBG_REPORT_FLAG);
nFlag
|= _CRTDBG_LEAK_CHECK_DF;
_CrtSetDbgFlag(nFlag);

return ::operator new(nSize, _NORMAL_BLOCK, lpszFileName, nLine);
};

#define DEBUG_NEW new(__FILE__, __LINE__)
#define new DEBUG_NEW

// Overload operator delete (, or the compiler will give warning.)
inline void __cdecl operator delete(void *pData, const char * lpszFileName, int nLine)
{
::
operator delete(pData);
}

#endif // #ifdef _DEBUG

#endif // #ifdef __cplusplus


#endif // #ifndef __DEBUGNEW_H_33164B60_A660_4B88_AEA3_270C97F24B12_INCLUDED__



包含此文件,调试模式运行,结束后看输出,如果有内存泄漏将会看到。
比如:

Main.h

C/C++ code

// DebugNew.h might be in conflict with some other codes, such as STL.
// If you use STL, do include STL header files before DebugNew.h.
#include "DebugNew.h"

int main()
{
new int;

return 0;
}



然后会看到输出:
Detected memory leaks!
Dumping objects ->

x:/.../main.cpp(7) : {120} normal block at 0x00396220, 4 bytes long.
Data: <    > CD CD CD CD
Object dump complete.

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 特岗教师用户名和密码忘了怎么办 电信登录用户名和密码忘记了怎么办 电脑登录用户名和密码忘了怎么办 电脑网络用户名忘了连不上网怎么办 微博忘记登录名怎么办只记得昵称 买房子付了首付现在要退房怎么办 玩lol延迟高怎么办但网速没问题 中维世纪监控密码忘记了怎么办 原店主营业执照不注销怎么办新的 苹果手机铃声调到最大还小怎么办 投标时措施费忘记套价了怎么办 美团商家更改手机号和银行卡怎么办 淘宝买的衣服颜色发错了怎么办 在淘宝买的衣服颜色不一样怎么办 新买的木柜气味好重怎么办 淘宝店铺动态评分一直很低怎么办? 刚生下来的宝宝睡觉不吃奶怎么办 宝宝吐奶咳嗽了可能被呛到怎么办 床下面的液压支架支撑不了了怎么办 沙发的海绵垫坐着感觉太硬怎么办 修公路占地补偿盖房子房产证怎么办 哺乳期乳房有硬块挤不出来怎么办 老公投的公司倒闭了钱怎么办 小丑鱼老在缸上边游不下去怎么办 海缸养珊瑚又想养蝴蝶鱼怎么办 被几个月的小狗咬了怎么办 木本植物继代长出大量愈伤怎么办 钱兜树叶子发黄掉叶怎么办 手机qq群200人满了怎么办 支票被背书人的章盖浅了怎么办 没病装病的心理病患者怎么办 20多岁被骗40多万怎么办 一个学生上课爱捣乱班级课堂怎么办 军训的时候大姨妈来了怎么办 笔记本连接无线网说链接限制怎么办 12306密码和邮箱都忘了怎么办 烦恼都是自找的新书散页了怎么办 白色衣服被红色衣服染了怎么办 手机微信里面不能拍手功怎么办 肇事逃逸轻伤且对方不私了怎么办 数学差怎么办脑子不好啊数学学不老