Your Ad Here
首页 | 编程语言 | 网站建设 | 游戏天堂 | 冲浪宝典 | 网络安全 | 操作系统 | 软件时空 | 硬件指南 | 病毒相关 | IT 认证
软讯网络 > 编程语言 > C/C++ > 由于dll导致的奇异CRASH
【标  题】:由于dll导致的奇异CRASH
【关键字】:dll,CRASH
【来  源】:http://blog.csdn.net/oeichenwei/archive/2007/01/29/1496972.aspx

由于dll导致的奇异CRASH

Your Ad Here

之所以讲是奇异的crash,是因为我开发这么长时间还是第一次遇到这样类型的crash,开始的时候怀疑是由于在DLL中分配的内存在其它的dll中释放导致的,或者由于DLL已经卸载导致分配的内存不可用导致的,然后,经过实验,居然不是,这下可让我没了头脑。

经过仔细分析发现,是因为在dll中分配了一个对象指针,该对象的内存区域还是可用的,但是dll已经卸载,导致该对象的代码区域已经卸载,从而无法正确的访问析构函数导致的访问错误。

参考了 MSDN的技术文章http://www.microsoft.com/china/MSDN/library/netFramework/netframework/0501ExceptLog.mspx?mfr=true重要得以解决。找到了问题的原因,解决起来就容易了,加上try/catch丢弃掉那部分已经不存在代码了的内存。

解决的代码如下:

 RctEventInfo oEvent;
 RctEventInfo& tEvent = m_vEvents.front();
 try
 {
  oEvent = tEvent;
 }
 catch (...)
 {
  IRctEventParam** pParam = &oEvent.RctParamPtr;
  (*pParam) = NULL;
  pParam = &tEvent.RctParamPtr;
  (*pParam) = NULL;
  m_vEvents.pop_front();
  m_oLock.UnLock();
  return TRUE;
 }

注:我使用了智能指针,智能指针指向的对象代码已经不复存在导致的这个问题, 当然,我这里采用的 IRctEventParam** pParam = &oEvent.RctParamPtr;
  (*pParam) = NULL;
赋值方法将导致内存泄露……

=========================================
欢迎访问装修DIY必备--有房网
=========================================

设计模式之 Singleton:【上一篇】
试验开发第三代操作系统:【下一篇】
【相关文章】
  • spoolsvv.exe,cmdbcs.exe,WINLOGON.EXE,Svchost.dll威金
  • DLLs in Kernel Mode
  • Execute a function in any Win32 DLL - Reflection in Win32 DLL?
  • 对Windows 2000中wkssvc.dll中某个函数的分析
  • Midas.dll打包问题
  • 如何查看部署到SHAREPOINT 中的DLL的PublicKeyToken值
  • 用MASM编写的Utils.dll(VB+MASM混合编程)
  • DLL的类库怎样实现动态加载调用
  • 手动解决dll文件无法删除的问题
  • 保护你的DLL和Code不被别人使用 -C#篇
  • 【随机文章】
  • 【引用】让Apache支持ASP.NET
  • Flash实现物体运动的三种方法
  • 激情,压抑
  • Rete 算法
  • tomcat 并发问题 (terminating thread)
  • 软件项目管理框架
  • 直接插入排序(Insertion Sort)
  • JavaScript从入门到精通[文章列表联接]
  • WinPcap 教程
  • 在DWR中实现直接获取一个JAVA类的返回值
  • 【相关评论】
    没有相关评论
    【发表评论】
    姓名:
    邮件:
    随机码*
    评论*
          
    |  首 页  |  版权声明  |  联系我们   |  网站地图  |
    CopyRight © 2004-2007 软讯网络 All Rigths Reserved.