在上一篇博文:https://blog.csdn.net/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;
};
成功运行: