[求助,急!]LoadLibrary后紧接着再FreeLibrary会给出一个释放堆错误。

jiazaiguo 2010-04-22 07:43:45
如题:
HMODULE handle;
handle = LoadLibrary(L"E:\\Mydll.dll");
if (handle == NULL)
{
WriteLogToDebugView(_T("Call Library failed"));
return FALSE;
}
FreeLibrary(handle);

在FreeLibrary的时候会产生一个HeapFree的错误,请教下可能会是什么原因引起的呢。(dll的构造函数是空的,析构函数也是空的)
...全文
489 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
jiazaiguo 2010-04-25
  • 打赏
  • 举报
回复
搞定了,是dll代码中一个很隐蔽的问题
MoXiaoRab 2010-04-24
  • 打赏
  • 举报
回复
贴DLL的代码上来看看
puretech_ 2010-04-24
  • 打赏
  • 举报
回复
可能的原因如下:
你的宿主程序(也就是调用DLL的调用者)是DEBUG模式的,
而DEBUG模式的CALL STACK和RELEASE模式不一样。RELEASE模式会采用大量优化的动作,
比如寄存器传参等等。此外DEBUG模式还有STACK的CHECK,RELEASE通常没有,
因此会出现错误。

因此DEBUG程序调用的DLL之类的通常要求也是同构DEBUG的,
RELEASE程序调用的DLL通常也要求是RELEASE(部分情况下调用DEBUG版本不会出太大问题)
prodiving 2010-04-24
  • 打赏
  • 举报
回复
dll加载后内部还有活动?比如你创建了一个线程,或者窗口?

在dll释放的时候,如果创建的对象没关闭,那么他的地址空间和new出来堆内存都可能已经无效了,所以会触发异常
99263 2010-04-23
  • 打赏
  • 举报
回复
估计是全局变量惹的祸,楼主从这方面查一查。
cdsnpeter 2010-04-22
  • 打赏
  • 举报
回复
Release版本,带上调试信息。去掉优化,看看错在哪里?
jiazaiguo 2010-04-22
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 heksn 的回复:]
releae下会把没初始化的变量赋值为0
[/Quote]
load时会创建所有的全局变量,我都初始化了。全局类对象有自己的构造函数,应该不存在这个问题吧。
  • 打赏
  • 举报
回复
releae下会把没初始化的变量赋值为0
jiazaiguo 2010-04-22
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 maoloverme1 的回复:]
可能是Mydll.dll内部实现有问题
[/Quote]

实际上是什么都没做,只是load一下dll马上就free掉了。
dlll里面有个全局的类对象,在load时会进入构造函数,在free时进入析构函数,但是构造函数和析构函数都是空的,什么都没处理。
社会栋梁 2010-04-22
  • 打赏
  • 举报
回复
的确,这些代码没有问题,应该是dll内部的问题
maoloverme1 2010-04-22
  • 打赏
  • 举报
回复
可能是Mydll.dll内部实现有问题
jiazaiguo 2010-04-22
  • 打赏
  • 举报
回复
唉,我知道问题描述得不够详细,可是无法再详细了。。。
dll为release的时候load再free就会出问题,dll是debug版的则没问题。
jiazaiguo 2010-04-22
  • 打赏
  • 举报
回复
补充一下,这个问题是在release的调试模式下出现的,debug不会出现。

15,471

社区成员

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

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