当前位置: 首页 > wzjs >正文

义乌本地网站开发广州网站排名专业乐云seo

义乌本地网站开发,广州网站排名专业乐云seo,今日国际新闻10条,做网站不给钱问题 遇到问题的背景是: 我希望在全局变量定义的时候初始化一个全局变量: 就是这个_networker 我原先是这么写的: 这里就是一个简单的获取单例的函数。 然后在Networker的构造函数里面会有: 读取配置文件和Initialize函数&#xf…

问题

遇到问题的背景是:

我希望在全局变量定义的时候初始化一个全局变量:

就是这个_networker

我原先是这么写的:

这里就是一个简单的获取单例的函数。

然后在Networker的构造函数里面会有:

读取配置文件和Initialize函数,读取配置文件这里没什么问题我就不讲了。

关键在于初始化函数:

在初始化函数里面有某一段是这样的:

其中_OM是一个定义在cpp文件里面的全局变量:

OP_TYPE是一个枚举类型,存储着不同操作的类型。

而此时运行代码的时候,在第一个_OM初始化语句就报错了:

_OM[Util::StrHash("HEARTBEAT")] = OP_TYPE::HEARTBEAT;

报的是段错误,这时候我很纳闷?难道是hoscotch_map不支持枚举类型做值???看了一眼又发现其构造类型是泛型。但是这里一直在报错,并且我把全局变量改成Networker类的静态变量也会报错。

解决

后来才知道,原来全局变量和静态变量都存在静态区,而静态区的变量初始化顺序是随机的,也就是说在我执行到下面的代码的时候,这时候还没有进入main函数,也就是说程序此时还在随机的初始化所有的静态变量,而此时恰好_networker的初始化在_OM的前面,所以在initialize()执行的时候_OM还未初始化,所以导致了段错误

shared_ptr<Networker> _networker = Networker::getSingleton(); 

其实我一开始问gpt的时候,gpt就给出了答案,只是我当时还不理解这个过程:

但此时gpt给出的答案是StrHash中用了没初始化的对象,但是方向对了,所以算半对吧。

这个问题是一个隐性bug,工作中碰到这样的bug很难发现,所以特此记录。

防御性编程

在编程的时候养成习惯,静态变量的初始化定义放在主程序的某个初始化函数中执行。

其次,如果需要检查代码是否存在这样的问题,可以对每个全局变量或静态变量的初始化检查其初始化函数调用链中是否存在其他静态变量或全局变量,如果存在就有静态变量初始化顺序的问题。

http://www.dtcms.com/wzjs/278845.html

相关文章:

  • 进口食品销售销售在那个网站做百度通用网址
  • 做58同城那样的网站今天的新闻
  • dw 做简单静态网站怎样注册个人网站
  • 利用大平台做网站营销存在的问题及改进
  • 淘宝联盟怎么建网站网站注册信息查询
  • 专门做塑胶原料副牌网站谷歌推广培训
  • 唐山网站主页制作推广软文发布平台
  • 网站建设的开发方式和费用培训心得体会范文大全1000
  • 免费的奖励网站有哪些深圳企业黄页网
  • 邹城做网站鼓楼网页seo搜索引擎优化
  • 企业网站建设规划百度搜索关键词设置
  • 大连flash网站进入百度网首页
  • 网站建设经典案例html网页制作
  • 免费做网站站标seo查询百科
  • 找人做网站应该注意什么优化公司结构
  • 怎样把网站做的好看打造龙头建设示范
  • net网站开发 介绍苹果看国外新闻的app
  • 裸体做哎按摩网站沈阳网站制作公司
  • 建设银行网络学习网站软文世界
  • 如何查看网站做没做竞价百度竞价代理商
  • 重庆网站建设公司有哪些内容千万不要学网络营销
  • 学校网站做几级等保免费自助建站哪个最好
  • 大朗做网站公司肇庆seo排名
  • 单页网站怎么做seo网页制作与网站建设实战教程
  • 长沙做网站华夏思源培训机构官网
  • 转转怎么做钓鱼网站国外seo大神
  • 网站用户管理系统搜索引擎大全入口
  • app制作工具无需编程深圳网站设计实力乐云seo
  • 沧州手机网站建设如何营销推广
  • 东营网站建设哪家专业网络推广100种方式