Visual Studio内存泄漏调试
2016-03-13 20:36
351 查看
在可能泄漏的文件头部加入下面几行(保证malloc和new的泄漏都可以检测到)
#define _CRTDBG_MAP_ALLOC
#include <crtdbg.h>
#ifdef _DEBUG //重载new运算符
#define new new(_NORMAL_BLOCK, __FILE__, __LINE__)
#endif
然后在程序中加入下面代码
程序运行起始位置: _CrtSetDbgFlag ( _CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF );
或者程序退出前加入: _CrtDumpMemoryLeaks();
需要在debug模式运行
下面是一个demo:
main.cpp
#define _CRTDBG_MAP_ALLOC
#include <crtdbg.h>
#ifdef _DEBUG //重载new运算符
#define new new(_NORMAL_BLOCK, __FILE__, __LINE__)
#endif
void* memleak1();
void* memleak2();
int main(){
//方法一
//_CrtSetDbgFlag ( _CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF );
void *p1 = memleak1();
void *p2 = memleak2();
int *a = (int *)malloc(4*sizeof(int));
//方法二
_CrtDumpMemoryLeaks();
return 0;
}
memleak1.cpp
#include <stdlib.h>
#define _CRTDBG_MAP_ALLOC
#include <crtdbg.h>
#ifdef _DEBUG //重载new运算符
#define new new(_NORMAL_BLOCK, __FILE__, __LINE__)
#endif
void *memleak1(){
return malloc(1);
}
memleak2.cpp 与 memleak1.cpp类似
#define _CRTDBG_MAP_ALLOC
#include <crtdbg.h>
#ifdef _DEBUG //重载new运算符
#define new new(_NORMAL_BLOCK, __FILE__, __LINE__)
#endif
然后在程序中加入下面代码
程序运行起始位置: _CrtSetDbgFlag ( _CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF );
或者程序退出前加入: _CrtDumpMemoryLeaks();
需要在debug模式运行
下面是一个demo:
main.cpp
#define _CRTDBG_MAP_ALLOC
#include <crtdbg.h>
#ifdef _DEBUG //重载new运算符
#define new new(_NORMAL_BLOCK, __FILE__, __LINE__)
#endif
void* memleak1();
void* memleak2();
int main(){
//方法一
//_CrtSetDbgFlag ( _CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF );
void *p1 = memleak1();
void *p2 = memleak2();
int *a = (int *)malloc(4*sizeof(int));
//方法二
_CrtDumpMemoryLeaks();
return 0;
}
memleak1.cpp
#include <stdlib.h>
#define _CRTDBG_MAP_ALLOC
#include <crtdbg.h>
#ifdef _DEBUG //重载new运算符
#define new new(_NORMAL_BLOCK, __FILE__, __LINE__)
#endif
void *memleak1(){
return malloc(1);
}
memleak2.cpp 与 memleak1.cpp类似
相关文章推荐
- 浏览器中的javaScript
- C# 异步和委托学习
- 一种较为隐蔽ConcurrentModificationException情形
- lab3:跟踪分析Linux内核的启动过程
- 今天学会了一个新的技术int.TryParse(id,out x)
- ZOJ-3903-Ant【逆元】【数学】
- grep, egrep的用法
- 暴力破解西电校园网密码
- Linux系统终端后台运行非常有用的Screen命令
- Android学习之跨进程通信安卓接口定义语言AIDL(一)
- linux查看系统版本
- [CSAPP]Chapter 2 Representing and Manipulating Information
- 蓝桥杯 校门外面的树 (线段树,区间处理)
- stl之关联容器——set,map,hashtable
- LeetCode101—Symmetric Tree
- 深入理解C++语言
- 数据结构――广义表
- Mac Android Studio 如何使用资产目录
- 关于沙盒路径的一些理解
- HDOJ 3743 Frosh Week(树状数组求逆序对)