原创文章,转载请注明出处
目录
内存泄漏
内存泄漏的简单定义是没有正确的释放已经分配的内存,这在C/C++程序中是一个很难检测的bug;一块较小的内存泄漏可能很容易被忽视,但如果内存泄漏的现象不断积累,后果可能导致程序的崩溃,甚至还会影响到其他程序的运行,所以内存泄漏的问题值得重视。一方面需要有良好的编程习惯,但即使是最优秀的程序员也不能保证所写的代码里没有内存泄漏问题;令一方面使用工具帮助检测以及定位内存泄漏点。
内存泄漏问题的调试一是要检测是否有内存泄漏;二是要定位内存泄漏点。
C Run-Time Libraries (CRT)
为了检测内存泄漏,在CRT中定义了debug heap functions;在需要进行内存调试的代码中添加以下声明(必须按以下顺序):
#define _CRTDBG_MAP_ALLOC
#include <cstdlib>
#include <crtdbg.h>
在crtdbg.h中,将C标准的malloc和free库函数映射到_malloc_dbg和free方法,通过映射的方法来记录内存的分配和释放情况;一旦引入了上述声明后,在目标程序的退出位置前通过调用 _CrtDumpMemoryLeaks()就能检测到是否有内存泄漏;但这样的话只能知道是否有内存泄漏,不知道在哪里发生了内存泄漏。
通过以下宏定义,可以在调试内存泄漏时输出发生内存泄漏的文件以及在该文件下的代码行数:
#ifdef _DEBUG
#define new new(_NORMAL_BLOCK, __FILE__, __LINE__)