在上一篇博文:https://blog.youkuaiyun.com/codingEMIPark/article/details/81590256 修改函数get和show结构体信息,结果出现了错误,首先看代码:
MyStruct myClass::getMyStruct()
{
return this->mystruct;
}
void myClass::setMyStruct(MyStruct str)
{
PtrMyStruct ptrmystruct = &str;
ptrmystruct->char1 = "hello,this is test";
ptrmystruct->short1 = 42254;
ptrmystruct->arrshort = new short[4]{4, 32, 21, 57};
};
void myClass::showStructInfo(MyStruct str)
{
PtrMyStruct ptrmystruct = &str;
cout << "sizeof(mystruct):"<<sizeof(mystruct) << endl;
......
cout << "&ptrmystruct->arrshort[3]:" << &ptrmystruct->arrshort[3] << endl;
}
增加了一个读取private结构体的方法和MyStruct的形参,但是出现错误:

查看一下信息,应该是arrshort的地址问题:

C++中未初始化的指针的地址为0xcccccccc ,所以看来是arrshort这个short*数据没有初始化,原来程序中虽然已经new了的首元素地址传给了arrshort,但是myClass成员中的mystruct对象却没有接收到这个新的数据,相当于缺少了赋值的过程。修改一下代码:
void myClass::setMyStruct(MyStruct str)
{
PtrMyStruct ptrmystruct = &str;
ptrmystruct->char1 = "hello,this is test";
ptrmystruct->short1 = 42254;
ptrmystruct->arrshort = new short[4]{4, 32, 21, 57};
this->mystruct = *ptrmystruct;
};
成功运行:

C++结构体赋值问题
本文探讨了C++中结构体成员变量赋值时出现的问题,并通过具体实例展示了如何正确地进行结构体成员变量的赋值操作。

1825

被折叠的 条评论
为什么被折叠?



