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

建立网站数据库实验报告承德市外贸网站建设

建立网站数据库实验报告,承德市外贸网站建设,有经验的佛山网站设计,谷歌seo采集问题 遇到问题的背景是: 我希望在全局变量定义的时候初始化一个全局变量: 就是这个_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/537125.html

相关文章:

  • 建设网站论文vi设计公司 深圳
  • 商务网站开发与建设论文正确的网址格式例子
  • 做高仿表网站容易被k吗推广平台有哪些技巧和方法
  • 马鞍山网站建设制作公司app开发合同模板最新版
  • 移动网站开发视频怎样嵌入专门做三国战纪的网站叫什么意思
  • 济南专业网站建设咨询wordpress雷锋网
  • 网站域名实名认证官网企业网站建设公司那家好
  • 常州有哪些做阿里巴巴网站的个人怎么申请注册商标
  • 做旅游的网站 优帮云百度提交网址入口
  • 改变网站的域名专门做折扣的网站
  • 自定义网站建设开发一个网页具体流程
  • 网站排名优化教程网站域名实名认证通知
  • 网站欣赏网站欣赏广州网站建设V芯ee8888e
  • 网站标题关键词成都培训学校网站建设
  • 网站怎么做关键词内链网页设计与制作实训总结2000字
  • 网站如何上传泰州建设局网站安监站通报
  • 深圳福田站手机微信打开文件是乱码
  • 建站模板怎么选武陵天下网站建设
  • 网站登录失败怎么回事阜阳建设网站公司
  • 河北建设厅身份认证锁登录网站专业做礼品团购的网站
  • 免费网站设计内江如何做百度的网站
  • 免费开源的网站系统产品推销
  • 网站建设及网络推广图片编辑器在线
  • 做it行业招标网站有哪些网站移动端就是app吗
  • 查询行业信息的网站新网建立网站
  • 用jsp做的可运行的网站天台县低价网站建设
  • 网站是com好点还是cn百度做的网站字体侵权
  • 网站开发过程阶段做房地产用什么网站好
  • 做网站的行业平台中国做网站公司排名
  • 太湖县住房与建设局网站品牌营销做得好的品牌有哪些