预防和检测内存泄漏的方法:
来源:互联网 发布:儿童计算机教育 知乎 编辑:程序博客网 时间:2024/06/10 08:35
预防和检测内存泄漏的方法:
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.
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/douyangyang/archive/2009/04/02/4042312.aspx
- 预防和检测内存泄漏的方法:
- java内存泄漏的预防和检测
- 如何预防和检测内存泄漏
- 内存泄漏的防范和检测方法
- Java内存泄漏的几大原因及预防检测
- GDI泄漏和内存泄漏 检测方法
- 检测内存泄漏的方法
- 如何检测及预防C++内存泄漏
- linux下检测和定位内存泄漏位置的方法
- 预防和检测内存漏洞
- VC下内存泄漏的检测方法
- VS2005 检测内存泄漏的方法(转载)
- 关于内存泄漏检测的一些方法
- C/C++检测内存泄漏的方法
- vs中检测内存泄漏的方法
- VC++设置检测内存泄漏的方法
- VS2008检测内存泄漏的方法
- vs中检测内存泄漏的方法
- 安装SQLSERVER2000时出现以前的某个程序安装已在安装计算机上创建挂起的文件操作
- oracle归档模式
- Javascript 中的false、0、null、undefined和空字符串对象
- jQuery 表格工具集
- GCC-3.4.6源代码学习笔记(28)
- 预防和检测内存泄漏的方法:
- 让环境变量生效不需重启Windows
- UML解惑:图说UML中的六大关系
- 关于cout,wcout输出的测试,以及printf,wprintf 输出中文,内存中直接输出图像给网页问题
- SubString match with a big file
- 據說很牛的英文歌曲(轉的。。)
- 杨辉三角形
- Studying note of GCC-3.4.6 source (28)
- 检查Windows mobile程式的内存泄露