【发布时间】:2021-12-20 23:59:33
【问题描述】:
我试图写一个 n 叉树,每个节点包含 4 个元素,1 个向量
当我尝试通过指针赋值时,我发现该值将被后面的值覆盖。
我想可能是因为指针指向每个值,所以所有的值都是一样的。所以我尝试将指针设置为NULL,但还是不行。
#include <string.h>
#include <vector>
#include <iostream>
using namespace std;
struct Node{
vector<Node*> subNodes;
bool isFile=0;
bool isDir=0;
int value=0;
};
int main()
{
Node* rootNode_ptr;
Node rootNode;
rootNode_ptr =&rootNode;
rootNode_ptr->value=99;
for(int i=0;i<5;i++){
Node* subNode_ptr;
Node subNode;
subNode_ptr=NULL;
subNode_ptr = &subNode;
subNode_ptr->value=i;
rootNode_ptr->subNodes.push_back(subNode_ptr);
cout<<"0 : "<<rootNode_ptr->subNodes[0]->value<<endl;
cout<<rootNode_ptr->subNodes[i]->value<<endl;
}
return 0;
}
【问题讨论】:
-
您误解了复制的工作原理。你用五个指针填充
rootNode,它们都指向同一个节点。 -
Node subNode;在循环内意味着您创建了一个对象,该对象将在此循环迭代结束时停止存在。但是您存储了指向该对象的指针,因此当循环迭代结束时,这些指针变成了悬空指针。