如何debug内存泄漏?

vividbear 2007-12-11 02:37:46
在microsoft visual studio 2005下, 用C写的程序, 生成动态DLL, 被其他程序频繁地调用(每秒一次). 每次调用时, 在资源管理器内看到, 整个程序就会有大概30KB的内存成长. 这样连续跑一段时间, 机器就没内存可用了.
检查了自己的程序, 有alloc的地方都free了. 不知道还有什么地方会引起内存泄漏呢? 有什么办法debug呢? 有什么辅助程序, 或者软件呢? 自己菜鸟一只, 已经快被这个问题折磨死了.谢谢任何建议.
...全文
381 9 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
chlaws 2007-12-11
  • 打赏
  • 举报
回复
JF
firemcu123 2007-12-11
  • 打赏
  • 举报
回复

Thanks for your help!

Best regards!
CoffeeCN 2007-12-11
  • 打赏
  • 举报
回复
Develop your own detecting programs.
reference:
http://www-900.ibm.com/developerWorks/cn/linux/l-mleak/index.shtml
wajintai7809 2007-12-11
  • 打赏
  • 举报
回复
up
firemcu123 2007-12-11
  • 打赏
  • 举报
回复


If I make a Linux C program,how should I do ?

Thx!
CoffeeCN 2007-12-11
  • 打赏
  • 举报
回复
VC的Debug在默认情况下内存泄漏功能是关闭的
你只要在main, winmain, dllmain入口处加上如下代码就可以了

int nFlag = _CrtSetDbgFlag(_CRTDBG_REPORT_FLAG);
nFlag |= _CRTDBG_LEAK_CHECK_DF;
_CrtSetDbgFlag(nFlag);

在函数返回之后可以看到哪些内存块还没有释放
believefym 2007-12-11
  • 打赏
  • 举报
回复
vs2005自己也有内存泄露检查功能的,debug退出的时候会在输出窗口有相应的内容,不过好像不是每个泄露都能检测到的
楼上说的boundschecker是个不错的内存泄漏检测工具,可以试一下
freshairfly 2007-12-11
  • 打赏
  • 举报
回复
用BoundsChecker,能够看到你什么地方申请的memory程序退出时没有释放
BoundsChecker是和VS集成在一起的,是VS的一个插件

另外一款叫RuntimeChecker,也很好用

70,023

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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