说说你如何查内存泄漏 memory leak

HelloDan 2010-12-27 04:03:54

近来突然看想了解一下自己写的东西是不是有内存泄漏。

首先我先自己说一下我怎样找的吧,我用的是VS2008.

1 在VS2008的MFC工程里面(或者其他工程也可以用_CrtDumpMemoryLeaks),可以在debug下,程序结束时提示有没有内存泄漏。

2 可以用BoundsChecker之类的工具,我试过在VC6的,得到的结果其实跟VS2008的提示差不多,只是那时在VC6里面的没有,也没有试用过更新的版本。


3 让程序长时间运行,看task manager的内存是不是增加之类的。

4 用Windbg,我试过查句柄泄漏的,也比较方便。


我其实最想知道有这样的,就是在Debug下,按F5运行程序,一段时间后再按Shift+F5,退出,这样也有内存泄漏的提示如果有内存泄漏的话。上面说的1,2方法都是要程序退出时才提示的,如关闭对话框,而不是按Shift+F5的情况,那样是没有提示的。

我想在Shift+F5后就提示主要是因为有一些程序是服务程序,是开机就运行的,没窗口;另外就是如果这样就能提示那么可以早一些发现问题(不用到像3所说的那样就可以减少一些错误)。

还有是这样暂时不谈Smart pointer.

你们还有什么方法呢? 谢谢!



...全文
564 28 打赏 收藏 转发到动态 举报
写回复
用AI写文章
28 条回复
切换为时间正序
请发表友善的回复…
发表回复
freshui 2010-12-29
  • 打赏
  • 举报
回复
valgrind 免费的,一直在用。
不过是linux的 呵呵
月中蓝 2010-12-28
  • 打赏
  • 举报
回复
有没有免费的啊
HelloDan 2010-12-28
  • 打赏
  • 举报
回复
[Quote=引用 25 楼 zxw0521 的回复:]

引用 13 楼 hellodan 的回复:

引用 12 楼 zxw0521 的回复:

土办法:
下班前开机循环执行程序很多次,第2天早上回来看任务管理器里面该程序内存占用是否比昨天变多


这种方法跟第3的一样啊。。。


好吧,我承认,我回帖不看帖
[/Quote]

我不是这个意思,谢谢你!
ZXW0521 2010-12-28
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 hellodan 的回复:]

引用 12 楼 zxw0521 的回复:

土办法:
下班前开机循环执行程序很多次,第2天早上回来看任务管理器里面该程序内存占用是否比昨天变多


这种方法跟第3的一样啊。。。
[/Quote]

好吧,我承认,我回帖不看帖
mLee79 2010-12-27
  • 打赏
  • 举报
回复
内存都自己管的, 内存泄漏就顺便查了...
hdusunny44 2010-12-27
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 hellodan 的回复:]

引用 10 楼 hdusunny44 的回复:

通常是先用3,看是否异常,再用purify、valgrind等工具


我最想知道的是能不能在Shift+F5之后提示??? 谢谢
[/Quote]

我也期待有大神可以给点提示
renxu350 2010-12-27
  • 打赏
  • 举报
回复
对于VS2005,DEBUG版本一般这样,
在 main() 函数开头加上:

_CrtSetDbgFlag(_CRTDBG_ALLOC_MEM_DF|_CRTDBG_LEAK_CHECK_DF);

,,,,,
CandPointer 2010-12-27
  • 打赏
  • 举报
回复
Intel Parallel Inspector adds memory and thread checking into Microsoft Visual Studio. Parallel Inspector helps increase the reliability, security, and accuracy of C/C++ applications.

* Reliability: Find deadlocks and memory errors that cause lockups & crashes
* Security: Find memory and threading vulnerabilities used by hackers
* Accuracy: Identify memory corruption and race conditions to eliminate erroneous results

Memory checking includes memory leaks, dangling pointers, uninitialized variables, use of invalid memory references, mismatched memory, allocation and deallocation, stack memory checks, and stack trace with controllable stack trace depth

Thread checking includes race conditions, deadlocks, depth configurable call stack analysis, diagnostic guidance, built-in knowledge of Intel Threading Building Blocks, OpenMP, and Windows threads.

It is available as part of Intel Parallel Studio or as a standalone product.



-------------------
Intel® Parallel Inspector - Thread and Memory Checker
http://software.intel.com/en-us/articles/intel-parallel-inspector/
CandPointer 2010-12-27
  • 打赏
  • 举报
回复
我喜欢 Intel。软硬件都很强大。


LZ,试试 Intel Parallel Inspector ,这个东西,
针对 Visual studio C/C++, 提供了多线程错误检查 (内存/线程)


最新版,好像是2011吧,与时俱进
ouyh12345 2010-12-27
  • 打赏
  • 举报
回复
BoundsChecker
wolftop 2010-12-27
  • 打赏
  • 举报
回复
VC内存泄漏检测工具_Visual Leak Detector

http://www.codeproject.com/tools/visualleakdetector.asp

1、 可以得到内存泄漏点的调用堆栈,如果可以的话,还可以得到其所在文件及行号;
2、 可以得到泄露内存的完整数据;
3、 可以设置内存泄露报告的级别;
4、 它是一个已经打包的lib,使用时无须编译它的源代码。而对于使用者自己的代码,也只需要做很小的改动;
5、 他的源代码使用GNU许可发布,并有详尽的文档及注释。对于想深入了解堆内存管理的读者,是一个不错的选择。
Gary@Tokyo 2010-12-27
  • 打赏
  • 举报
回复
看来大家的方法比较多,学习一下
prohibit 2010-12-27
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 yum_yum 的回复:]
用purify工具,这个是专门检测内存的,包括泄露、越界、指针跑飞等都可以检查,在VC上使用最方便,楼主可以试试,我顺道接分,呵呵!
[/Quote]++,工具倒确实是只知道purify这一个
HelloDan 2010-12-27
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 zxw0521 的回复:]

土办法:
下班前开机循环执行程序很多次,第2天早上回来看任务管理器里面该程序内存占用是否比昨天变多
[/Quote]

这种方法跟第3的一样啊。。。
ZXW0521 2010-12-27
  • 打赏
  • 举报
回复
土办法:
下班前开机循环执行程序很多次,第2天早上回来看任务管理器里面该程序内存占用是否比昨天变多
HelloDan 2010-12-27
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 hdusunny44 的回复:]

通常是先用3,看是否异常,再用purify、valgrind等工具
[/Quote]

我最想知道的是能不能在Shift+F5之后提示??? 谢谢
hdusunny44 2010-12-27
  • 打赏
  • 举报
回复
通常是先用3,看是否异常,再用purify、valgrind等工具
yum_yum 2010-12-27
  • 打赏
  • 举报
回复
用purify工具,这个是专门检测内存的,包括泄露、越界、指针跑飞等都可以检查,在VC上使用最方便,楼主可以试试,我顺道接分,呵呵!
ayw215 2010-12-27
  • 打赏
  • 举报
回复
楼上几位都说的差不多了啊。。。
justkk 2010-12-27
  • 打赏
  • 举报
回复
或者借助于PC-Lint工具,先静态检查一下,或许有帮助..
加载更多回复(5)

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧