刘品
学以致用---博主简介:专注语音、视频数字信号处理方面的研究以及算法在手机平台上面的移植和优化。涉及语音/音频编解码,语音增强,语音识别,语音音质客观评估,VOIP语音引擎 Qos算法模块和声音变速不变调和变调不变速等功能实现。熟悉ARM 各个系列的CPU,用ARMv4,ARMv5,ARMv6 and Cortex Neon 汇编优化相关算法代码,争取perforamance 最优。目前主要Windows mobile and Android platform上做相关speech/audio算法以及应用开发, HEVC 编解码器PC 和手机上的开发与应用。(交流Email:liupin.2008@gmail.com)

主要方法:利用系统带的函数:EnableMemLeakCheck() 和 函数重载,能快速准备的定位到内存泄漏的地方,方法简单且实用,值得借用。

     


#include <crtdbg.h>

#ifdef _DEBUG     //重载一下new函数,这样能得到使用new 开辟空间而发生泄漏的文件和所在行,这就是定位
#define new   new(_NORMAL_BLOCK, __FILE__, __LINE__)
#endif


void EnableMemLeakCheck()   //用于检测是否有内存泄漏。
{

   _CrtSetDbgFlag(_CrtSetDbgFlag(_CRTDBG_REPORT_FLAG)|_CRTDBG_LEAK_CHECK_DF);

}

void main()
{
   EnableMemLeakCheck();
   int *leak = new int[10];
}

运行后得到的消息:

Loaded 'C:\WINNT\System32\ntdll.dll', no matching symbolic information found.
Loaded 'C:\WINNT\system32\kernel32.dll', no matching symbolic information found.
Detected memory leaks!
Dumping objects ->
D:\DS_Learn\meleak\test1.cpp(19) : {39} normal block at 0x00430120, 40 bytes long.
 Data: <                > CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD
Object dump complete.
The thread 0x91C has exited with code 4391200 (0x430120).
The program 'D:\DS_LEARN\meleak\Debug\meleak.exe' has exited with code 4391200 (0x430120).

很快就能定位到内存泄漏的地方。

我原来也利用相关的方法,在C代码中,重载malloc 和 free,也能很好的检测有没有内存泄漏和发生泄漏的地方,方法都很简单,其实自己在写代码注意一下结构,还是很容易避免发生内存泄漏。

    平时喜欢用这样的结构:

    projectname_init();  //在初始化时,开辟好空间,对project中一些变量,如结构体开辟空间

    projectname_process();  //作相关的处理

    projectname_uninit();     //结束程序运行,释放所以动态分配的空间。

 


 

posted on 2008-09-13 12:27  liupin  阅读(2148)  评论(1)    收藏  举报

-->