gpt4 book ai didi

c++ - 防止指针指向空

转载 作者:搜寻专家 更新时间:2023-10-31 01:54:36 26 4
gpt4 key购买 nike

我无法阻止我的指针指向的对象被释放。我认为这是问题所在,但我不知道如何解决。

我的代码:

enum TOKEN_TYPE {
OPEN, CLOSE, TEXT
};

struct Token {
int type;
std::string value;
};

typedef std::vector<Token>::iterator token_it;

Tree::Tree(token_it start) {
root.value = start->value;
createNode(++start, &root);
}

void Tree::createNode(token_it it, Node* parent) {
Node current;

current.value = it->value;
current.parent = parent;

if(parent != 0) {
parent->children.push_back(&current);
}

++it;
while(it->type != TOKEN_TYPE::CLOSE && it->value != current.value) {
if(it->type == TOKEN_TYPE::OPEN) {
createNode(it, &current);
}

++it;
}
}

我尝试逐步执行程序,一切都很完美,直到程序开始退出 createNode 调用,垃圾收集释放 current,留下 parent 没有指向任何东西;至少那是我认为正在发生的事情。

最佳答案

首先,C++ 中没有垃圾回收。

其次,使用智能指针代替原始指针:

void Tree::createNode(token_it it, SmartPtr<Node> parent)

第三,你的假设是对的:

{
Node current;
parent->children.push_back(&current);
} //current is destroyed here

发生这种情况是因为 current 分配在自动存储中。

如果您在parent 中管理内存,则可以动态创建当前节点:

{
Node* current = new Node;
parent->children.push_back(current);
}

关于c++ - 防止指针指向空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9430418/

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