gpt4 book ai didi

c++ - 如何访问超出范围的变量?

转载 作者:太空宇宙 更新时间:2023-11-04 15:35:50 24 4
gpt4 key购买 nike

class foo{
vector<foo*>* queue;
vector<int> pos;
foo(vector<foo*>* queue, vector<int> pos){
this->queue=queue;
this->pos=pos;
}
public:
foo(vector<foo*>* queue){
this->queue=queue;
}
void init(){
vector<int> posNew = pos;
//Create Binary Tree Children of the state FOO
posNew.push_back(/* An Additional Value*/)
foo newFoo(queue, posNew);
queue->push_back(&newFoo);
}//Here the variables newFoo and posNew are out of scope so they are deleted even from the queue
}

class bar{
vector<foo*> queue; //Assume that queue has a root node added to it.
bar(){
for(unsigned int i=0; i<queue.size();i++){
queue[i]->init();// Somewhere along when the third element is calculated the value overflows since I assume the object are deleted
}
}
}

我正在尝试使用 BFS 搜索和队列来解决问题。但是我无法让队列工作,因为我创建的对象子对象超出了范围。对此的任何帮助将不胜感激。

编辑:在我的实际代码中,我遇到了麻烦,因为当对象超出范围时,它会向我显示这些内存分配。 enter image description here

这个绿色部分是根节点所在的位置,红色部分是子节点的预期数据应该在但现在已删除的位置。

最佳答案

变量queuefoo 指针的 vector ,而不是foo 对象。但是在 init() 中,您将 newFoo 声明为 foo 对象并将其插入队列。 newFoo 是函数 init() 的局部变量,所以当函数执行完成时, newFoo 丢失。

你可以将newFoo声明为一个指针并为其分配内存,比如

foo *newFoo = new foo(queue, posNew);

并将 newFoo 插入您的队列。

关于c++ - 如何访问超出范围的变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34073897/

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