【发布时间】:2020-12-27 18:25:57
【问题描述】:
我正在尝试编写代码以使用堆栈创建通用树,其中 -1 表示节点结束,但我无法弄清楚我哪里出错了。 谁能帮我调试一下? 代码虽然很简单。
我发现for循环只运行了两次,并且在第二次运行结束时,有一个seg。发生故障。
using namespace std;
class Node
{
public:
int data;
vector<Node> *children={nullptr};
};
int main()
{
int a[]={10,5,4,-1,1,-1,-1,6,-1};
int n=sizeof(a)/sizeof(a[0]);
stack<Node> s;
Node root;
for(int i=0;i<n;i++)
{
if(a[i]==-1)
s.pop();
else
{
Node temp;
temp.data=a[i];
if(s.size()==0)
{
root=temp;
}
else
{
//cout<<temp.data<<endl;
s.top().children->push_back(temp);
// cout<<s.top().data<<endl;
}
s.push(temp);
}
//cout<<i<<endl;
}
return 0;
}````
【问题讨论】:
-
在空堆栈上调用
pop是未定义的行为。 -
告诉我们它的故障所在。
-
@Someprogrammerdude:我认为从未尝试过从空堆栈弹出给定数据的情况。
-
@YvesDaoust 啊,缩进(或者更确切地说是没有缩进)让我印象深刻。不过,实际上确保可能是个好主意。
-
鉴于数组输入,代码不允许对空堆栈进行弹出操作
标签: c++ pointers vector tree segmentation-fault