关于动态加载DLL的问题

Nepalon 2009-09-10 10:44:00
我现在是通过在VC中导入lib和h文件来对动态库进行调用的。现在的问题是我的DLL中会存在内存泄漏的问题(调用一次有5M内存泄漏),这样如果调用上这个DLL上10次的话就泄漏了50M内存了,而且这个问题比较不好解决。
如果我改为通过动态加载,即通过LoadLibrary()和GetProcAddress()函数来取得DLL中的函数并进行调用,调用完后就FreeLibrary掉。不知通过这种方式调用DLL时是不是每次在LoadLibrary时取得的是一个干净的DLL,在FreeLibrary时就会把DLL调用过程中分配的内存也释放掉??
...全文
89 点赞 收藏 8
写回复
8 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
wnx_u 2009-10-28
不能的,必须等到进程空间释放后才行,因为你调用freelirbray的时候还没真正释放,只是减少了一次使用记数
回复
Nepalon 2009-10-28
没有人回复自己顶
回复
Nepalon 2009-10-23
我知道是DLL内部有内存泄漏。现在就是想问,如果我每次调用时都是LoadLibrary和FreeLibrary,是否可以解决掉内存泄漏问题?
回复
SlamAI 2009-09-11
[Quote=引用 3 楼 tr0j4n 的回复:]
第一,DLL写得有问题
第二,可以这么做。设置个全局的hDll,只要LoadLibrary一次就够了,以后获得函数都用这个DLL的HMODULE
[/Quote]

同意这个方法
设置一个共享数据段来存放DLL的句柄
回复
oLINo 2009-09-10
可以这样做,但是效率很低下,你要每次都LOAD,然后又要FREE,不是解决问题的最根本的方法。
回复
MoXiaoRab 2009-09-10
第一,DLL写得有问题
第二,可以这么做。设置个全局的hDll,只要LoadLibrary一次就够了,以后获得函数都用这个DLL的HMODULE
回复
dirdirdir3 2009-09-10
应该不会,一般泄漏都是new了忘记delete,这样的话是在进程的堆里面分配的内存,没有办法释放,除非进程关闭............
回复
wdq0916 2009-09-10
这个和调用方式没关系吧,貌似dll内部函数有内存泄露
回复
发帖
进程/线程/DLL
创建于2007-09-28

1.5w+

社区成员

VC/MFC 进程/线程/DLL
申请成为版主
帖子事件
创建了帖子
2009-09-10 10:44
社区公告
暂无公告