如何查找内存泄露问题

zh852 2010-11-15 02:05:35
项目中有很严重的内存泄露问题,查找内存泄露有什么比较好的方法吗??我用boundsChecker查到了一些,但是它指出有内存泄露的地方 有的貌似没有错误,不知道为啥。
麻烦大家了,希望大家能说详细点,谢谢啊~~
...全文
942 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
cswuyg 2010-11-16
  • 打赏
  • 举报
回复
以前看过一本书,说是有工具可以查。IBM Rational Purify
Metrosexual 2010-11-16
  • 打赏
  • 举报
回复
找些查漏工具用下
yeah2000 2010-11-16
  • 打赏
  • 举报
回复
_CrtSetDbgFlag(_CrtSetDbgFlag(_CRTDBG_REPORT_FLAG) | _CRTDBG_LEAK_CHECK_DF);
_CrtSetBreakAlloc(40934);

可以使用这段代码来定位,将数字改为你溢出信息中大括号中的数字
grf9527 2010-11-16
  • 打赏
  • 举报
回复
boundsChecker我用过,确实可以,可惜我没有破解版的。
zh852 2010-11-16
  • 打赏
  • 举报
回复
所有的代码都是别人写的,整体思路和结构都没有问题,我是接手剩下工作的,找了很长时间都没找到,有点泄气了 呵呵 找了一个星期才找出六七个错误来,
听人说 可以结合mapfile来进行查找
map文件中的那个内存地址要怎么进行计算会得到vs中提到的内存地址呢
比如:
Detected memory leaks!
Dumping objects ->
{40934} normal block at 0x05C46C48, 12 bytes long.
Data: <h 8u > 68 A6 80 01 38 75 C6 05 CD CD CD CD
{40933} normal block at 0x05C67538, 12 bytes long.
Data: <Hl h X > 48 6C C4 05 68 A6 80 01 58 82 CC 05

下面是make文件的
Address Publics by Value Rva+Base Lib:Object
0002:00003090 ?_AtlGetThreadACPFake@ATL@@YGIXZ 00418090 f i ServerManager.obj
LeviZhou 2010-11-16
  • 打赏
  • 举报
回复
umdh windbg安装目录下附带的小工具, 很好用,能够分析出泄露位置的调用栈,
如果泄露很严重用这个没错
bingxuebage 2010-11-16
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 zh852 的回复:]

所有的代码都是别人写的,整体思路和结构都没有问题,我是接手剩下工作的,找了很长时间都没找到,有点泄气了 呵呵 找了一个星期才找出六七个错误来,
听人说 可以结合mapfile来进行查找
map文件中的那个内存地址要怎么进行计算会得到vs中提到的内存地址呢
比如:
Detected memory leaks!
Dumping objects ->
{40934} normal ……
[/Quote]




ServerManager.cpp里查找new,看看有没有对应delete
zh852 2010-11-16
  • 打赏
  • 举报
回复
恩 好的 我搜搜 关于工具 purify啥的我都试过了 没感觉有多好
各个模块都已经做成了dll 所以不大好找 如果有人有比较好的方法 希望提供 嘿嘿 谢谢了
chaow09 2010-11-16
  • 打赏
  • 举报
回复
_CrtDumpMemoryLeaks(); 找找这个函数吧,百度搜下 “浅谈C++内存泄露”,很全面的代码检查内存泄露,我自己总结的,用得还不错,呵呵。
蒙飞鸿 2010-11-15
  • 打赏
  • 举报
回复
如果全是自己的代码,也就是说不调用非系统的、其他人写的东西,那么先全工程搜索比如new之类的动态申请内存的语句,看看都有没有合适的delete之类的善后工作。。
crosoli 2010-11-15
  • 打赏
  • 举报
回复
我和楼主有同样的困惑...
浩南_哥 2010-11-15
  • 打赏
  • 举报
回复
[Quote=引用楼主 zh852 的回复:]
项目中有很严重的内存泄露问题,查找内存泄露有什么比较好的方法吗??我用boundsChecker查到了一些,但是它指出有内存泄露的地方 有的貌似没有错误,不知道为啥。
麻烦大家了,希望大家能说详细点,谢谢啊~~
[/Quote]
它指出的错误 有些是 你在一个函数里给全局的变量内存但是你没有在同一个函数中释放它 它就判断这个地方泄露了(你可能在其他的地方释放了)
lwbeyond 2010-11-15
  • 打赏
  • 举报
回复
boundsChecker 指出的一定有问题, 再看看
Eleven 2010-11-15
  • 打赏
  • 举报
回复
用排查法耐心找吧
jyh_baoding 2010-11-15
  • 打赏
  • 举报
回复
程序运行到泄露的地方肯定发生泄露,多加TRACE,检测程序运行
花熊 2010-11-15
  • 打赏
  • 举报
回复
很多时候都貌似没有错误,再仔细查查,用代码来确定没有错误
ouyh12345 2010-11-15
  • 打赏
  • 举报
回复
还是得用工具

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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