c++ string类型成员变量在调用构造函数后未能正确赋值
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调试未能第一时间发现问题,影响后续调试以及程序运行结果
c++ string类型成员变量在调用构造函数后未能正确赋值的更多相关文章
- C++ static、const和static const类型成员变量声明以及初始化
C++ static.const和static const 以及它们的初始化 const定义的常量在超出其作用域之后其空间会被释放,而static定义的静态常量在函数执行后不会释放其存储空间. sta ...
- StringUtils.isBlank()检验String 类型的变量是否为空
在校验一个String类型的变量是否为空时,通常存在3中情况 是否为 null 是否为 "" 是否为空字符串(引号中间有空格) 如: " ". Str ...
- 使用 JavaScript 中的变量、数据类型和运算符,计算出两个 number 类型的变量与一个 string 类型的变量的和,根据 string 类型处于运算符的不同位置得到不同的结果
查看本章节 查看作业目录 需求说明: 使用 JavaScript 中的变量.数据类型和运算符,计算出两个 number 类型的变量与一个 string 类型的变量的和,根据 string 类型处于运算 ...
- java 中,new一个新对象时,是先给成员变量赋上初值后 再来调用类中的构造函数的。
今天学习时法现一个问题,我们定义了一个Test类,在主类中new了一个他的对象,发现:在新建对象中所有的成员变量是先给定了默认初值的:0,null或者false, 之后再调用的构造函数.(如果变量是由 ...
- Java中在实例化一个类时,这个类中没有初始值的int类型成员变量i,i的值是不是0?
java中有两种类型一种是数值性,另一种是类变量数值性变量的初始值为0,类变量的初始化为null没做初始化成员变量int性变量是0, 在java中有这么一条规则,声明在方法中的变量在使用时必须要初始化 ...
- 【C++】const,static和static const类型成员变量声明及其初始化
1)const定义的常量在超出其作用域之后其空间会被释放,而static定义的静态常量在函数执行后不会释放其存储空间 void f1() { ; cout<<x<<endl; ...
- 【原】结构体包含CString类型成员变量出错的原理
问题如下:我定义了如下的一个结构体: typedef struct{ CString csText;}MyStruct; 并有如下的程序段1:MyStruct * p=NULL;p=(MyStru ...
- [转载] C++ 类中的类成员变量怎么调用带参数的构造函数来初始化?
#include "stdafx.h" class A { public: A(){ax = ;}; A(int a){ax = a;}; int ax; }; class B { ...
- 面向对象的特性-为String类型的变量扩展一个replaceAll()函数
———————————————————————————— <script type="text/javascript"> //按钮 ...
随机推荐
- 在win10环境下IED配置spark项目
eclipse在对spark的支持上并不友好,所以需要新下载并安装IntelliJ IDEA 2019.1.我下载安装的是专业版的,直接在网上搜索了破解码进行破解. 1. 配置java和scala I ...
- Codeforces Round #596 (Div. 2, based on Technocup 2020 Elimination Round 2)
A - Forgetting Things 题意:给 \(a,b\) 两个数字的开头数字(1~9),求使得等式 \(a=b-1\) 成立的一组 \(a,b\) ,无解输出-1. 题解:很显然只有 \( ...
- zabbix(4)数据库表分区优化
一.zabbix 数据库存储 zabbix-server将采集到的数据存储在数据库(mysql.oracle等),而数据存储的大小与每秒处理的数量量有关,因此数据存储取决于以下两个因数: (1)Req ...
- Project Euler Problem (1~10)
1.If we list all the natural numbers below 10 that are multiples of 3 or 5, we get 3, 5, 6 and 9. Th ...
- win10系统vs2008环境wince项目无法创建问题
文章备份,原文来自百度某个作者的博客. 昨晚,当我升级win10之后,发现系统使用还是挺顺畅的,没有当初升级win8的时候那么多错误. 但是今晚回来之后,发现之前win8.1下已经安装好的vs2008 ...
- php如何生成 uuid(总结)
php如何生成 uuid(总结) 一.总结 一句话总结: UUID的全拼为“Universally Unique Identifier”,可以译为“通用唯一识别码”. UUID是指在一台机器上生成的数 ...
- springmvc配置mybatis与hibernate的不同点
相信每个人对springmvc+hibernate或者springmvc+mybatis都不会陌生,拿来一个项目也都会开发.但是自己配置的情况下却很少,即使自己配置过,长时间不写也会忘,在这里记录一下 ...
- <javaScript>通过getElementsByTagName获取标签的class值
console.log(p[1].id); console.log(p.item(1).id); console.log(p[2].getAttribute("class")); ...
- 一个Flask应用运行过程剖析
相信很多初学Flask的同学(包括我自己),在阅读官方文档或者Flask的学习资料时,对于它的认识是从以下的一段代码开始的: from flask import Flask app = Flask(_ ...
- osg osgUtil::LineSegmentIntersector
#ifdef _WIN32 #include <Windows.h> #endif // _WIN32 #include <osgViewer/Viewer> #include ...