内存泄露

至善者善之敌 2010-07-30 02:34:08
今天看坛子上有人说到了类似的问题,我看了一下当关闭调试信息窗口时报了一段内容,如下:

Detected memory leaks!
Dumping objects ->
thrdcore.cpp(166) : {295} client block at 0x0038ACD8, subtype 0, 112 bytes long.
a CWinThread object at $0038ACD8, 112 bytes long
{71} normal block at 0x00384D00, 1000 bytes long.
Data: < p H h #> 02 70 04 00 00 00 00 00 48 03 68 03 93 05 04 23
Object dump complete.
The thread 0x24C has exited with code 0 (0x0).


应该是有泄露,那我如何知道哪里有问题,改如何解决呢?
...全文
180 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
dvlinker 2010-07-30
  • 打赏
  • 举报
回复
gdi资源也要释放的~
aamaomao 2010-07-30
  • 打赏
  • 举报
回复
不好意思,写错了
如果泄漏总是在295这个位置,就可用下面这个方法:
在watch窗口中设置
表达式:{,,msvcr71d.dll}_crtBreakAlloc 值: 295
不同版本vc中的crt的dll名称不同,把msvcr71d.dll替换成你的版本,就可以在分配内存的时候中断,看一下堆栈就知道那个位置了
aamaomao 2010-07-30
  • 打赏
  • 举报
回复
如果泄漏总是在259这个位置,就可用下面这个方法:
在watch窗口中设置
表达式:{,,msvcr71d.dll}_crtBreakAlloc 值: 259
不同版本vc中的crt的dll名称不同,把msvcr71d.dll替换成你的版本,就可以在分配内存的时候中断,看一下堆栈就知道那个位置了
至善者善之敌 2010-07-30
  • 打赏
  • 举报
回复
呵呵,也是根据提示信息来的,
一个是线程退出的时候没有释放,一个是NEW了没有DELETE
zxdlms 2010-07-30
  • 打赏
  • 举报
回复
怎么解决的?分享一下方法撒。
至善者善之敌 2010-07-30
  • 打赏
  • 举报
回复
两个泄露的问题都解决了,谢谢!
刚刚凉 2010-07-30
  • 打赏
  • 举报
回复
有很多工具可以检查这个 比如 LeakDiag, UMDH 等等 使用也很简单
如果不用工具的话 就得检查代码 先查是否所有申请内存都释放,包括:
new / new [] ---- delete / delete [] //注意一一对应
malloc ---- free
CoTaskMemAlloc ---- CoTaskMemFree
SysAllocString ---- SysFreeString
SafeArrayCreate ---- SafeArrayDestroy
CreatePen/CreateBrush ---- DeleteObject
GetDC ---- ReleaseDC
ITypeInfo::GetTypeAttr() ---- ITypeInfo::ReleaseTypeAttr()
COleSteamFile::OpenStream,
CreateStream, CreateMemoryStream ---- COleStreamFile::Close()
至善者善之敌 2010-07-30
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 na_he 的回复:]
单步调试,当crash的时候,看一下callstack.可以看出调用的次序。断定问题所在。
[/Quote]

程序太大,单步调试不是办法,现在只想定位哪里导致内存泄露,程序运行一段时间会出现如下提示:内存分配无法访问 PORT:4
浅蓝马 2010-07-30
  • 打赏
  • 举报
回复
先根据VC中提示内存泄露的消息找一下,
如果找不到,就用排除法吧,注释一大段一大段的代码,
逐步缩小范围,应该可以找到。
Eleven 2010-07-30
  • 打赏
  • 举报
回复
na_he 2010-07-30
  • 打赏
  • 举报
回复
单步调试,当crash的时候,看一下callstack.可以看出调用的次序。断定问题所在。
至善者善之敌 2010-07-30
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 songtao_01 的回复:]
thrdcore.cpp第166行分配的内存未被释放
[/Quote]

你这个是根据字面意思来的吧
songtao_01 2010-07-30
  • 打赏
  • 举报
回复
thrdcore.cpp第166行分配的内存未被释放
至善者善之敌 2010-07-30
  • 打赏
  • 举报
回复
这个没人顶啊!
至善者善之敌 2010-07-30
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 m_tornado 的回复:]
引用 2 楼 babilife 的回复:
内存泄露不光是申请没有释放这一原因吧


还有别的原因吗?
曾经用过 一个图像库,copy后要使用的人释放~悲剧~
[/Quote]

释放两次?杯具!
m_tornado 2010-07-30
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 babilife 的回复:]
内存泄露不光是申请没有释放这一原因吧
[/Quote]

还有别的原因吗?
曾经用过 一个图像库,copy后要使用的人释放~悲剧~
至善者善之敌 2010-07-30
  • 打赏
  • 举报
回复
内存泄露不光是申请没有释放这一原因吧
stonewater 2010-07-30
  • 打赏
  • 举报
回复
你搜下malloc和new,有没有对应的free和delete

16,472

社区成员

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

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

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