gpt4 book ai didi

c++ - 重新检查时指针属性发生变化

转载 作者:行者123 更新时间:2023-12-01 15:10:32 26 4
gpt4 key购买 nike

我是 C++ 的新手,目前正在从事一个网络项目,在对象指针 vector 方面遇到了一个不寻常的错误。

状态类:

struct State
{
public:
int reject_percent_;
int fill_percent_;
int partial_fill_;
bool is_logged_in_;
struct order
{
long id;
long price;
int quantity;
bool is_filled = false;
bool is_partially_filled = false;
};
std::vector<order *> orders;
};

插入 vector :(这里的状态是状态结构的对象)
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* ord = NULL;
for (int i = 0; i < state->orders.size(); ++i)
{
std::cout<<((state->orders).at(i)->id)<<"\n"; //outputs :: 93893845689152
std::cout<<((state->orders).at(i)->price)<<"\n"; //outputs :: 93893845689184
std::cout<<((state->orders).at(i)->quantity)<<"\n"; //outputs :: 869246848
if(obj->ClOrdID==(state->orders).at(i)->id)
{
ord=(state->orders).at(i);
break;
}
}

我知道这是 不是一个最小的可重现示例 ,但我认为这可能是一个我看不到的微不足道的错误,代码很大并且需要很长时间才能缩短,所以请多多包涵,你能指出找出可能导致此问题的原因,因为这些值似乎是数据类型的垃圾值。

最佳答案

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

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);

导致未定义的行为。您的程序可能会崩溃,一切看起来都正确,或者您的计算机可能会点披萨。

仅通过一些代码片段很难说解决此问题的最佳方法是什么。一种方法是更改​​ std::vector<order *> orders;std::vector<order> orders; .另一种方法是使用智能指针。

关于c++ - 重新检查时指针属性发生变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62390541/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com