C++内存泄漏查找分析
来源:互联网 发布:淘宝怎么买万艾可 编辑:程序博客网 时间:2024/05/22 13:13
引用一篇文章:
用C写程序,为了省事儿引用了别人一些代码,一调试程序发现:内存泄露了。程序代码量有点大,而且指针基本上都是用链表管理起来的,VC的调试器并不能给检查具体哪一行泄露。我想用C写程序的人这种情况一定跟我一样遇到过好多次,其中大多数人可能也跟我一样。依次注释和检查代码来排除这个问题~~ 最近,我又遇到了这个问题,本想到群中请教下别人有没好点儿的内存检查工具来辅助我排错,结果有幸让我得到了如下的方法:引用原文先查看系统的内存泄漏报告,如下:Detected memory leaks!Dumping objects ->{1057} normal block at 0x01873BD0, 8 bytes long. Data: < < > 1C 3C 87 01 F8 CD CD CD strcore.cpp(118) : {1056} normal block at 0x01873C10, 45 bytes long. Data: < 31 > 01 00 00 00 02 00 00 00 20 00 00 00 33 31 00 CD .....然后在程序主程序的初始化中加入下列语句:_CrtSetBreakAlloc(1057);在中断时进行查找即可。 这样再次启动程序时,申请 {1057} 这个内存时就会出发断点,然后栈回朔就可以定位到那个指针没释放了~~原文地址:http://www.cppblog.com/besterChen/archive/2011/12/18/162361.html
最近写的一个程序内存泄漏得比较厉害,以前都没注意,现在来查这些问题,真是痛苦,养成良好的习惯是很重要的,项目越大,越有效。
用上面介绍的方法 _CtrSetBreakAlloc(x); 确实可以找出内存泄漏的点, 但是经我测试发现 x 其实也并不一定非常准确,x是new调用的次数,如果所有的内存都在初始化的时候分配,那很方便就断点出来,但若是运行中内存分配,那这个查出来的堆栈位置就是错误的。
所以,使用时需要注意两点:
1. 内存分配都放在初始化,运行中不分配内存。
2. 运行中一定要分配内存,则需要程序运行同样的操作步骤,才有可能查出内存泄漏的准确位置。
0 0
- C++内存泄漏查找分析
- 关于查找内存泄漏
- java内存泄漏查找
- linux 内存泄漏查找
- vs查找内存泄漏
- linux 内存泄漏查找
- Java内存泄漏查找
- Android Studio MAT内存泄漏查找, 分析方法
- 使用valgrind 查找linux C/C++内存泄漏
- Java内存泄漏分析
- Windbg 分析内存泄漏
- Android 内存泄漏分析
- java_lang_OutOfMemoryError_unable_to_create_new_native_thread内存泄漏分析
- android 分析内存泄漏
- Erlang 内存泄漏分析
- LeakCanary分析内存泄漏
- android内存泄漏分析
- Mat分析内存泄漏
- 在windows上安装Python的各种包
- ibatIS各种数据库的自增长配置
- 手机上WAP和NET连接的区别
- iOS: 在代码中使用Autolayout (2) – intrinsicContentSize和Content Hugging Priority
- 关于利用异或操作来交换两个数值的方法
- C++内存泄漏查找分析
- iOS 程序启动过程
- 实现MFC六大机制的动态创建和序列化
- 算法----堆排序(heap sort)
- Android 如何在eclipse添加源码
- Linux内核剖析 之 进程简介
- 第一部分、十道海量数据处理面试题
- B/S与C/S的区别
- [ACM Step]Leftmost Digit 求最高位 对数的应用