C++的内存泄漏检测
作者:网络转载 发布时间:[ 2017/1/4 11:07:38 ] 推荐标签:测试开发技术 C++
C++大量的手动分配、回收内存是存在风险的,也许一个函数中一小块内存泄漏被重复放大之后,后掏空内存。
这里介绍一种在debug模式下测试内存泄漏的方法。
首先在文件的开头以确定的顺序写下这段代码:
1 #define _CRTDBG_MAP_ALLOC
2 #include <crtdbg.h>
3 #include <stdlib.h>
第1行定义了宏,实现一些内存分配函数向debug模式的映射。
打开<crtdbg.h>我们可以找到这么一段代码:
C++的内存泄漏检测1 #define NEW_WITH_MEMORY_LEAK_CHECKING new(_NORMAL_BLOCK,__FILE__,__LINE__) 2 #define new NEW_WITH_MEMORY_LEAK_CHECKING
这里new采用的是VC++对operator new的一个重载,可以在<vcruntime_new_debug.h>中找到,这里不多讲了。
完成以上两步之后,程序中new和delete回收的过程便被VC++监视了,在程序退出的地方采用
1 _CrtDumpMemoryLeaks();
便可以在“输出”窗口查看报告了。
举个栗子
1 #define _CRTDBG_MAP_ALLOC
2 #include <stdlib.h>
3 #include <crtdbg.h>
4 #define NEW_WITH_MEMORY_LEAK_CHECKING new(_NORMAL_BLOCK,__FILE__,__LINE__)
5 #define new NEW_WITH_MEMORY_LEAK_CHECKING
6
7 int main()
8 {
9 auto p = new int[10];
10 _CrtDumpMemoryLeaks();
11 return 0;
12 }
C++的内存泄漏检测1 #pragma push_macro("new") 2 #undef new 3 //using the raw new 4 #pragma pop_macro("new")
#pragma push/pop_macro将宏定义名压/弹栈,这里现将宏new压栈,保留原来的定义,之后取消定义,使用原生的new,使用完毕后弹栈恢复宏定义。
相关推荐
更新发布
功能测试和接口测试的区别
2023/3/23 14:23:39如何写好测试用例文档
2023/3/22 16:17:39常用的选择回归测试的方式有哪些?
2022/6/14 16:14:27测试流程中需要重点把关几个过程?
2021/10/18 15:37:44性能测试的七种方法
2021/9/17 15:19:29全链路压测优化思路
2021/9/14 15:42:25性能测试流程浅谈
2021/5/28 17:25:47常见的APP性能测试指标
2021/5/8 17:01:11