CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VC/MFC >  进程/线程/DLL

DLL调用内存泄漏问题--是Window的bug吗

楼主qybao(阿宝)2006-03-01 08:16:24 在 VC/MFC / 进程/线程/DLL 提问

大家不妨试试,写一个小程序,只是不断调用(我是调用2万次测试的)LoadLibrary,   GetProcAddress(这个可要可不要),   FreeLibrary,   然后用任务管理器看看你的程序进程,是不是内存会不断地消耗?不知哪位高人能解释一下原因,这是Window的bug吗?这样调用能否控制泄漏,怎么控制?  
   
  问题点数:50、回复次数:11Top

1 楼qybao(阿宝)回复于 2006-03-01 08:35:15 得分 0

我用Window的系统dll测试,好像没问题,这样,应该是我自己的dll的问题了。首先声明,我只是调用LoadLibrary,   FreeLibrary,   没调用dll的函数,所以函数里是否有内存泄漏,不在本讨论之内。   我想问,在编写dll的时候,怎样能让上层应用程序在调用时在内存里始终只保留一份资源共享。Top

2 楼RunningYang(sv)回复于 2006-03-01 08:38:08 得分 10

应该是你   DLL   的初始化函数里面有泄露吧?  
  也想知道你第二个问题的答案  
  顶Top

3 楼ouyh12345(五岭散人)回复于 2006-03-01 08:42:45 得分 10

做成com吧。  
  dll本来就要加载到应用程序的。Top

4 楼guogangj(无名小卒)回复于 2006-03-01 10:24:31 得分 10

检查下DllMain中有没有内存泄露?  
   
  如果没有,我想那是Windows的问题,我写过些网络通信程序一开始观察,也是越来越占内存,但运行了相当长一段时间后,它似乎会自动释放掉一些,使得内存占用率总是超不过一个上限。Top

5 楼sevencat(七猫)回复于 2006-03-01 12:17:16 得分 10

LoadLibrary缺省会调用你的DLL中的入口函数(假如你没有写,那就是编译器帮你自动生成的)Top

6 楼qybao(阿宝)回复于 2006-03-01 12:20:15 得分 0

我的dll入口只有很简单的return   1,应该不会有内存泄漏的  
  我奇怪的是我不断LoadLibrary,   FreeLibrary,内存会慢慢消耗,但用系统的dll测试却不会,难道编写dll还有什么特别的讲究吗?  
   
  to   ouyh12345()    
  不是不想做成com,但是客户要求的是做成dll,而且这个bug也是在客户那边测试发现的  
   
  to   guogangj(无名小卒)    
  我之所以不断地测试,就是想看看内存涨到一定程度后是否会自动释放,但是没有下降的迹象,而且内存越耗越多,最后还当机了,这也是客户那边测试发现的。我现在奇怪的是,我还没执行dll的函数就已经出现内存泄漏了,真是想不透,会不会是其他dll造成的,因为在我的dll里调用了客户给的一个dll,但是如果不执行我的dll的函数,是不会把客户的dll加载进来的,所以光是LoadLibrary,   FreeLibrary的话,应该还不涉及到客户的dll  
   
  Top

7 楼sevencat(七猫)回复于 2006-03-01 12:24:20 得分 0

经出现内存泄漏了,真是想不透,会不会是其他dll造成的,因为在我的dll里调用了客户给的一个dll,但是如果不执行我的dll的函数,是不会把客户的dll加载进来的,所以光是LoadLibrary,   FreeLibrary的话,应该还不涉及到客户的dll  
   
  //==================  
  但你只要是链到了他的DLL,在你LoadLibrary的时候,他的入口函数也会被调用,你可以找找看有没有一些高级工具看看这些东东。Top

8 楼yameng(雅梦)回复于 2006-03-01 12:32:39 得分 10

使用VC中的Depends工具看看你的DLL都用了哪些其它的DLL,测试一下是不是别的DLL产生的内存泄露Top

9 楼qybao(阿宝)回复于 2006-03-01 13:42:12 得分 0

to   sevencat(七猫)    
  我是在我的dll的函数里用loadliabary把客户的dll加载进来的,如果不执行我的函数,上层程序在加载我的dll的时候,是不是也链到了客户的dll,并调用了客户的dll的入口函数?  
  Top

10 楼sevencat(七猫)回复于 2006-03-01 14:02:33 得分 0

噢,那倒不会。Top

11 楼qybao(阿宝)回复于 2006-03-02 08:16:04 得分 0

问题解决  
  我写了个和客户的dll有同样接口的dll做测试,结果没有内存泄漏,说明客户的dll有问题,已经跟客户联系了,让他们自己再测试他们的dll  
  但是我还是很奇怪,如果不调用我的dll的函数,应该不会把客户的dll加载进来的,而事实上却加载,不知道客户的dll内部做了什么手脚,不管了,以后又时间再研究,结贴了,多谢楼上的各位兄弟了  
   
  Top

相关问题

  • 调用AfxMessageBox 会内存泄漏!!!!!!
  • 关于Dll内存泄漏的问题
  • 怎样检查DLL的内存泄漏
  • [求解]调用BitBlt后产生了内存泄漏,怎么解决??
  • dll导出类的内存泄漏问题
  • 内存泄漏!!
  • 内存泄漏!
  • 内存泄漏!??
  • 在标准C++中使用STL string变量,如果不调用~basic_string(),会造成内存泄漏吗?
  • MSComm串口编程,调用 m_comm.get_Input()读缓冲区时,为什么内存泄漏?请高手指点!

关键词

  • dll
  • 函数
  • 客户
  • 内存泄漏
  • 内存
  • 测试
  • 执行
  • 调用
  • 加载
  • loadlibrary

得分解答快速导航

  • 帖主:qybao
  • RunningYang
  • ouyh12345
  • guogangj
  • sevencat
  • yameng

相关链接

  • Visual C++类图书
  • Visual C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo