为什么我在打印泛型树时会出现分段错误



这是代码库。我无法找出此代码中发生的错误(运行时(。该显示功能显示通用树,并且在主功能中正在实现通用树。

树节点

struct node
{
int data;
vector<node*> children;
node(int data){
this->data = data;
}
};

这是显示功能。

void display(node* n)
{
string str = n->data+"->";
for(node* child:n->children)
{
str+=child->data+",";
}
str+=".";
cout<<str<<endl;
for(node* child:n->children)
{
display(child);
}
}

这是主要的

int main()
{
int arr[] = {10,20,50,-1,60,-1,-1,30,70,-1,80,110,-1,120,-1,-1,90,-1,-1,40,100,-1,-1,-1};
node *root;
stack<node*> st;
for(int i=0 ; i<24 ;i++)
{
if(arr[i]==-1)
{
st.pop();
}
else{
node *t = new node(arr[i]);
if(st.size()>0)
{
st.top()->children.push_back(t);
}
else{
root = t;
}
st.push(t);
delete(t);
}
}
display(root);
return 0;
}

有两个错误:

  • 分段错误的原因是delete(t);,而节点仍在树和堆栈中被引用,并且稍后需要,这导致使用损坏的内存。只有当树最终被解除分配时,您才必须删除节点
  • 您忘记在显示功能中将->data转换为string
    string str = to_string(n->data)+"->";
    …
    str += to_string(child->data)+",";
    

相关内容

  • 没有找到相关文章

最新更新