动态加载dll时,freelibrary,出现内存泄露,详情如下:

grf9527 2012-07-05 03:25:59
我有个exe,假设是A,需要调用一个带窗口资源的dll,假设是B,B要调用一个数据访问的dll,假设是b1,b同时还调用一个检测网络状态的dll,假设是b2.

A---B


B-----b1
|------b2

上面是调用关系。

A调用B用的是LoadLibrary("B.dll");使用一堆函数,比如初始化窗口,显示,隐藏窗口,销毁窗口和各种资源。

现在发现一个问题:
如果程序A不调用B,一定不会出现内存泄露。

如果A调用B,一定出现内存泄露。
后来,我仔细检查了调用过程,发现A在调用B的方法过程中,没有泄露,也就是说,从loadlibrary开始,初始化,显示,隐藏,销毁,都没有泄露。
然后在关闭A的时候,出现了泄露,在关闭A的时候,响应了ondestroy函数,函数中freelibrary。


也就是说:泄露是发生在B的生命周期内。

b1,b2的内存泄露,会不会导致这样的现象,

...全文
406 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
ouyh12345 2012-07-05
  • 打赏
  • 举报
回复
checkbounder等工具
grf9527 2012-07-05
  • 打赏
  • 举报
回复
谢谢,我没有工具,可否提示下用什么工具可以检测。

另外,我通过停止引用dll的方式,最终找到了泄露的地方。是 B引用的b1
不过比较累了,
就是把项目复制,然后去掉一个调用的dll 。看看还泄露不。呵呵。
ouyh12345 2012-07-05
  • 打赏
  • 举报
回复
是不是有线程没结束?
用工具检查啊,哪个dll出问题了,就找dll的作者

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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