【发布时间】:2020-05-03 19:51:50
【问题描述】:
我的问题可能有一个简单的解决方案让我眼前一亮,但到目前为止我一直无法找到它。我对 C 语言很陌生,这是我用 C++ 编写的第一个程序。
我有一个函数create_complete_tree(int nr_child_nodes, int tree_depth),它生成一个深度树int tree_depth,其中每个节点(最后一行除外)都有int nr_child_nodes 个子节点。 create_complete_tree(2,4) 制作一棵树,开头是这样的:
1
/ \
/ \
2 9
/ \ / \
3 6 10 13
/\ /\/\ /\
...
我正在尝试创建一个函数print(std::ostream& str),当在上面树的根节点上调用它时,会以这种格式打印树的内容:
node_1
node_2
node_3
node_4
node_5
node_6
node_7
node_8
node_9
node_10
node_11
node_12
node_13
node_14
node_15
我会担心稍后添加缩进,但现在我只专注于以正确的顺序打印节点。这是我目前所拥有的:
void node::print(std::ostream& str) {
str << this->get_name() << std::endl;
for (int i = 0; i < this->get_nr_children(); i++) {
node child = (*this->get_child(i));
child.print(str);
}
}
此函数将节点 1-8 打印出来,但随后出现 Segmentation fault: 11 错误。我知道此错误是由于尝试访问以某种方式不可用/不受限制的内存而导致的,但我很难理解这在我的情况下的真正含义。我的create_complete_tree 方法如下所示:
void node::create_complete_tree(int nr_child_nodes, int tree_depth) {
if (tree_depth == 1) {
return;
} else {
while (this->get_nr_children() < nr_child_nodes) {
node* new_child = new node();
this->add_child(new_child);
(*new_child).create_complete_tree(nr_child_nodes, tree_depth - 1);
}
}
}
每个节点的子节点指针存储在一个名为child_nodes 的向量中。感谢您抽时间阅读。如果有任何回复可以帮助我找到解决方案并更好地理解内存分配,我将不胜感激。
【问题讨论】:
标签: c++ pointers tree segmentation-fault