注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

^_^ china.ygw的博客

软件开发/c/c++/数据库/开源/linux/windows/安全/网络...

 
 
 

日志

 
 
 
 

想象不到的程序退出时std::set对象调用find成员发生exception  

2015-06-16 19:22:24|  分类: c/c++ |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

         今天早上发现的这个问题,代码很简单,类似如下:
         static set<string> setTest;
         if (setTest.end() != setTest.find("test")) {    // 在此处发生崩溃
                 xxxx
         }
         错误提示如下:
          First-chance exception at 0x0f27977b (xxx.dll) in breakflow.client.exe: 0xC0000005: Access violation reading location 0x00000004.
         现在介绍一下环境吧:
         1)windows 8 64位企业版
         2)visual studio team system 2008 sp1英文版
         3)主程序A.exe静态调用动态库B.dll,A.exe为普通VC对话框程序,B.dll为MFC动态库
         4)B.dll封装了类classB,classB定义了静态成员static set<string> setTest
         5)B.dll定义了classB的实例classBinstance,同时将classBinstance进行导出
         6)classB的析构函数会调用setTest,代码如文章开头一致
         7)classBinstance的定义顺序先于setTest
         介绍到这里,不知道大家看出问题没有?^_^
         因为classBinstance先于setTest定义,所以classBinstance先初始化,然后才是setTest,析构时的顺序相反,先析构setTest,然后才析构classBinstance。但是在析构classBinstance时,setTest已经被析构,所以......^_^
         简单的原因,复杂的逻辑,记录一下吧!!!
  评论这张
 
阅读(42)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018