0

我不知道是什么导致程序失败,除了它与尝试为左右孩子分配一些指针有关。没有错误消息,程序只是无法运行。我只是假设这是因为我错误地分配了指针。

这是结构:

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);
}

s 是 TreeNode* 类型的堆栈并保存节点。root 是单个节点。

改过很多次了,都忘了我是从什么开始的。这是测试代码(setInfo 工作得很好):

tree.setInfo('b');
tree.setInfo('c');
tree.setSubtree('-');

任何关于我应该如何分配指针的见解将不胜感激。

4

1 回答 1

0
BinaryTree<Type> *b,*c;
...
b->root = s.top();
...
c->root = s.top();

您永远不会初始化指针bc.

您应该自己发现了这些错误。将这个站点作为您防止错误的第一道防线是一个非常糟糕的主意。你不会学习如何调试。没有我们的帮助,您怎么会发现这些问题?使用您的编译器、使用分析工具(如 valgrind)、使用调试器,甚至手动执行代码。

通过启用编译器警告,了解如何使用您的编译器。当编译优化并启用足够的警告时,GNU 和 clang 将捕获此类错误。了解如何使用调试器。学习如何手动执行代码。

于 2012-09-24T22:35:01.617 回答