我不知道是什么导致程序失败,除了它与尝试为左右孩子分配一些指针有关。没有错误消息,程序无法运行。我只是假设它是因为我错误地指定了指针。
这是结构:
struct TreeNode
{
Type nodeinfo;
BinaryTree<Type> *left;
BinaryTree<Type> *right;
};
该类的名称是使用模板的BinaryTree。这是令人讨厌的方法:
template <typename Type>
void BinaryTree<Type>::setSubtree(Type a){
root = new TreeNode;
BinaryTree<Type> *b,*c;
root->nodeinfo=a;
b->root = s.top();
root->right = b;
s.pop();
c->root = s.top();
root->left = c;
s.pop();
s.push(root);
}
是一个TreeNode *类型的堆栈并保存节点。 root是各个节点。
我已经多次改变它,我忘记了我的开始。这是测试代码(setInfo工作正常):
tree.setInfo('b');
tree.setInfo('c');
tree.setSubtree('-');
对于我应该如何分配指针的任何见解都将非常感激。
答案 0 :(得分:0)
BinaryTree<Type> *b,*c;
...
b->root = s.top();
...
c->root = s.top();
您永远不会初始化指针b
和c
。
你应该自己抓住这些错误。来到这个网站作为你防止错误的第一道防线是一个非常糟糕的主意。你不会学习如何调试。没有我们的帮助你怎么能发现这些问题?使用编译器,使用valgrind等分析工具,使用调试器,甚至手动执行代码。
通过启用编译器警告,了解如何使用编译器。当编译优化并启用了足够的警告时,GNU和clang将捕获这些错误。了解如何使用调试器。学习如何手动执行代码。