指针属性在重新检查时发生更改 我是C++新手,目前正在做一个网络项目,遇到了一个异常的错误,用一个指针指针。

指针属性在重新检查时发生更改 我是C++新手,目前正在做一个网络项目,遇到了一个异常的错误,用一个指针指针。,c++,c++11,object,pointers,vector,C++,C++11,Object,Pointers,Vector,国家级: 推入向量:这里state是state struct的对象 State::order* o; o->id = (obj->ClOrdID); // obj->ClOrdID = 1 o->price = (obj->Price); // obj->Price = 1 o->quantity = (obj->OrderQty); // obj->OrderQty = 1 std::cout<<o->id<

国家级:

推入向量:这里state是state struct的对象

State::order* o;

o->id = (obj->ClOrdID);   // obj->ClOrdID = 1
o->price = (obj->Price);  // obj->Price = 1
o->quantity = (obj->OrderQty); // obj->OrderQty = 1
std::cout<<o->id<<"\n";           //outputs 1
state->orders.push_back(o);
在其他功能中:


我知道这不是一个最小的可复制示例,但我认为这可能是一个我看不到的小错误,代码太大,需要很长时间来缩短,所以请耐心听我说,你能指出这个问题的原因吗,因为这些值似乎是数据类型的垃圾值。

您没有为订单分配内存,也没有初始化指针

State::order* o;
取消引用此指针以写入其中

o->id = (obj->ClOrdID);   // obj->ClOrdID = 1
o->price = (obj->Price);  // obj->Price = 1
o->quantity = (obj->OrderQty); // obj->OrderQty = 1
从中读出

std::cout<<o->id<<"\n";           //outputs 1
导致未定义的行为。你的程序可能会崩溃,一切看起来都正常,或者你的电脑可能会点比萨饼


仅仅用一些代码片段很难说解决这个问题的最佳方法是什么。一种方法是更改std::vector顺序;到std::vector orders;。另一种方法是使用智能指针。

您没有为订单分配内存,也没有初始化指针

State::order* o;
取消引用此指针以写入其中

o->id = (obj->ClOrdID);   // obj->ClOrdID = 1
o->price = (obj->Price);  // obj->Price = 1
o->quantity = (obj->OrderQty); // obj->OrderQty = 1
从中读出

std::cout<<o->id<<"\n";           //outputs 1
导致未定义的行为。你的程序可能会崩溃,一切看起来都正常,或者你的电脑可能会点比萨饼

仅仅用一些代码片段很难说解决这个问题的最佳方法是什么。一种方法是更改std::vector顺序;到std::vector orders;。另一种方法是使用智能指针

指针有一个不确定的值。通过此未初始化指针间接定向的行为未定义

您可能应该改为使用此选项:

std::vector<order> orders;
因此,向量包含订单实例

指针有一个不确定的值。通过此未初始化指针间接定向的行为未定义

您可能应该改为使用此选项:

std::vector<order> orders;

因此,向量包含订单实例。

我还建议使用唯一指针向量。如果不知道项目的完整代码,就很难判断一个简单的值是否正确,或者指针是否正确needed@GuillaumeRacicot我通常希望避免在示例中引入额外的动态分配,除非示例表明需要动态分配。我不认为在示例代码中演示了动态分配的需要。很酷,谢谢提供了信息性的答案,我是C++新手,想做一个项目来学习,我确信这是我缺少的基本知识;我还建议使用唯一指针向量。如果不知道项目的完整代码,就很难判断一个简单的值是否正确,或者指针是否正确needed@GuillaumeRacicot我通常希望避免在示例中引入额外的动态分配,除非示例表明需要动态分配。我不认为在示例代码中演示了动态分配的需要。很酷,谢谢提供了信息性的答案,我是C++新手,想做一个项目来学习,我确信这是我缺少的基本知识;您正在存储指向未分配内存状态->orders.push\u backo的指针;这会导致未定义的行为这有点误导。push_backo为UB,因为函数读取值,读取不确定值的行为未定义。如果指针是用一个实际的无效指针值初始化的,那么将其存储到向量中就不会是UB.Cool。谢谢你提供的信息性答案,我是C++新手,并且试图着手学习项目,我确信这是我缺少的基本知识。您正在存储指向未分配内存状态->orders.push\u backo的指针;这会导致未定义的行为这有点误导。push_backo为UB,因为函数读取值,读取不确定值的行为未定义。如果指针是用一个实际的无效指针值初始化的,那么将其存储到向量中就不会是UB.Cool。谢谢你提供的信息性答案,我是C++新手,并且试图着手学习项目,我确信这是我缺少的基本知识。