c++ string类型成员变量在调用构造函数后未能正确赋值
2024-09-02 22:06:29
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调试未能第一时间发现问题,影响后续调试以及程序运行结果
最新文章
- 从Java String实例来理解ANSI、Unicode、BMP、UTF等编码概念
- 如何在mac上用终端打开XAMPP自带的MySQL
- Android 实现QQ扩展listview(expandlistview)
- failed to load session ";ubuntu";
- UVA 10970-Big Chocolate
- git的使用与积累
- vijos P1001 谁拿了最多奖学金
- 使用Dev中的GridView进行数据增删操作
- Android 的 Sqlite基本操作
- Aspose.Word邮件合并之自定义数据源
- json 函数
- vuex的mutations传值
- Android P正式版即将到来:后台应用保活、消息推送的真正噩梦
- 设计模式のAbstractFactory(虚拟工厂)----创建模式
- 潭州课堂25班:Ph201805201 django 项目 第三十二课 后台站点管理(课堂笔记)
- 《DSP using MATLAB》Problem 7.3
- 《Celeste》 开发者是如何精心制作“冲刺”的
- 牛刀小试MySQL--GTID
- 遍历json 对象的属性并且动态添加属性
- 【matlab】输出显示函数 sprintf()&;disp()
热门文章
- jmeter+ant执行 报错:Reference xslt.classpath not found 【采坑记录】
- CF1174D Ehab and the Expected XOR Problem(二进制)
- 【SPOJ】Longest Common Substring
- unctf esayrop wp
- 如何在虚拟机中安装kali linux
- appium 小程序自动化测试
- TynSerial序列(还原)TClientDataSet
- MAC将根目录文件夹的权限赋给用户
- 请解释一下 JavaScript 的同源策略
- 使用LineNumberReader逐行读取文本文件