struct RelItem{
string segName;
Elf32_Rel* rel;
string relName;
RelItem(string seg, int addr, string lb, int t);
};
RelItem::RelItem(string seg, int addr, string lb, int t){
segName = seg;
relName = lb;
//rel = new Elf32_Rel(); //root cause
rel->r_offset = addr;
rel->r_info = t;
}

该string类型变量relName是类的最后一个成员变量,在此之前还有有两个成员变量,分别是string类型和指针类型.

调试过程中发现在rel指针变量未new 新值的情况下,构造函数依然能够正确返回,gdb调试发现rel变量并非空指针,

最终在打印relName的时候发现有乱码,

怀疑是因为rel变量没有分配新的内存空间,构造函数赋值的过程因为先赋值了后声明的变量relName

导致rel指针也被赋值了一个随机值,从而修改了其他变量的值导致打印错乱.

如果我们将rel和relName的声明顺序调换下,构造函数不变,gdb调试的时候发现在

rel->r_offset = addr;

 就会报告rel空指针异常,从而能够提早发现问题

总结:

在构造函数对成员变量赋值的过程中,推测应该会按照成员变量声明的顺序分配空间,

因此如果指针变量(声明顺序靠前)在未赋值的情况下,会出现后赋值的变量因为需要分配空间,随机分配了一个值给指针变量

从而导致gdb调试未能第一时间发现问题,影响后续调试以及程序运行结果

最新文章

  1. 从Java String实例来理解ANSI、Unicode、BMP、UTF等编码概念
  2. 如何在mac上用终端打开XAMPP自带的MySQL
  3. Android 实现QQ扩展listview(expandlistview)
  4. failed to load session "ubuntu"
  5. UVA 10970-Big Chocolate
  6. git的使用与积累
  7. vijos P1001 谁拿了最多奖学金
  8. 使用Dev中的GridView进行数据增删操作
  9. Android 的 Sqlite基本操作
  10. Aspose.Word邮件合并之自定义数据源
  11. json 函数
  12. vuex的mutations传值
  13. Android P正式版即将到来:后台应用保活、消息推送的真正噩梦
  14. 设计模式のAbstractFactory(虚拟工厂)----创建模式
  15. 潭州课堂25班:Ph201805201 django 项目 第三十二课 后台站点管理(课堂笔记)
  16. 《DSP using MATLAB》Problem 7.3
  17. 《Celeste》 开发者是如何精心制作“冲刺”的
  18. 牛刀小试MySQL--GTID
  19. 遍历json 对象的属性并且动态添加属性
  20. 【matlab】输出显示函数 sprintf()&disp()

热门文章

  1. jmeter+ant执行 报错:Reference xslt.classpath not found 【采坑记录】
  2. CF1174D Ehab and the Expected XOR Problem(二进制)
  3. 【SPOJ】Longest Common Substring
  4. unctf esayrop wp
  5. 如何在虚拟机中安装kali linux
  6. appium 小程序自动化测试
  7. TynSerial序列(还原)TClientDataSet
  8. MAC将根目录文件夹的权限赋给用户
  9. 请解释一下 JavaScript 的同源策略
  10. 使用LineNumberReader逐行读取文本文件