我对c ++很新,我最近收到了一个使用模板创建自己的二叉搜索树的项目。目标是二叉树能够接收任何类型的数据。 IntBinaryTree.h应该能够接受EmployeeInfo的对象。我已经得到它编译,但我得到一个错误消息 glibc检测到双重免费或腐败(fasttop)我不完全确定这意味着什么。另外我不确定我是否正确设置了程序。还要注意,我正在main.cpp中逐个测试函数,这就是为什么只使用了插入函数。
更新 我通过TreeNode * newNode = new TreeNode为insertNode函数分配内存,现在我收到“在实例化void IntBinaryTree :: insertNode(T)中的错误消息)[与T = EmployeeInfo]:main.cpp:22:29从这里需要“
file.InputStream.Seek(0, SeekOrigin.Begin);
答案 0 :(得分:0)
在insertNode
方法中,您没有为节点分配任何空间,而是使用未初始化的指针:
TreeNode<T> *newNode;
newNode->value = val;
newNode->left = newNode->right = NULL;
您需要为节点分配一些内存:
TreeNode<T> *newNode = new TreeNode<T>;
我强烈建议您学习使用调试器,这样您就可以逐行浏览代码以查看它在做什么。没有人每次都写出完美的代码,调试器是查看出错的最简单方法。
编辑:
上面的代码不起作用,因为你没有Employee
的默认构造函数,但只有TreeNode
的默认构造函数。这意味着您无法创建包含TreeNode
。{/ p>的Employee
解决此问题的最佳方法是向TreeNode
添加一个构造函数,该构造函数接受一个引用T
对象的参数,以便它可以初始化自己的value
来自该参数的对象。
将此添加到您的TreeNode
课程
TreeNode(T &val) : value(val), left(NULL), right(NULL) { }
此代码将val
参数复制到value
并初始化left
和right
指针。
然后将您的insert
代码更改为。
TreeNode<T> *newNode = new TreeNode < T > (val) ;
//Insert the Node
insert(root, newNode);
请注意,无需设置左右指针,因为构造函数现在为您执行此操作。