#include <iostream>
#include <string>
#include <fstream>
using namespace std;
template <class T>
struct TreeNode{
string value;
T key;
TreeNode<T> *LeftChild;
TreeNode<T> *RightChild;
TreeNode (T k,string Val)
{
this->value=Val;
this->key=k;
this->LeftChild=NULL;
this->RightChild=NULL;
}
};
template <class T>
class BinaryTree{
private:
TreeNode<T> *Root;
public:
BinaryTree();
void insertNode();
};
template <class T>
BinaryTree<T>::BinaryTree()
{
Root=NULL;
ifstream fin;
fin.open("names.txt");
string buffer;
T buff;
while (!fin.eof())
{
getline(fin,buffer,'~');
fin>>buff;
cout<<buff<<buffer<<endl;
cout<<"down the tree"<<endl;
TreeNode<T> *temp=Root;
while (temp!=NULL)
{
TreeNode<T> *Right=temp->RightChild;
TreeNode<T> *Left=temp->LeftChild;
if (temp->key>buff)
{
temp=temp->LeftChild;
}
else if (temp->key<buff)
temp=temp->RightChild;
}
cout<<"further down"<<endl;
}
temp->value=buffer;
temp->key=buff;
cout<<"and done!"<<endl;
cout<<"hey"<<endl;
}
fin.close();
}
我正在制作二叉树。我的树中有左右子节点的指针,每个节点都有一个键和一个字符串值。在我的析构函数中,我正在读取文件并将键和值存储在节点中。该文件的每一行都具有以下格式:
"M. Ubiquity~ 14100148"
- 值是键后面的名称。
每当我运行此代码时,我都会出现分段错误错误,但我似乎无法找到错误。
任何提示/帮助将不胜感激。
答案 0 :(得分:1)
您拥有Root=NULL;
,然后排成几行TreeNode<T> *temp = Root;
,因此您拥有temp=NULL
。
显然while (temp!=NULL)
永远不会执行,而在while循环之后你有temp->value=buffer;
会导致分段错误!
答案 1 :(得分:0)
指针只能与内存地址相关联,而不能与值相关联。主要有两种方法:如果你有一个自动变量,你可以将它的地址分配给这样的指针:
int i = 6; //automatic variable
int *pi = &i;
std::cout << pi; // you get the address of pi (hexadecimal number)
std::cout << *pi; // 6
或者您可以手动分配内存。主要的是如果你为一个变量分配了内存,你还必须解除分配它,否则你的程序就会出现“内存泄漏”。
int *pi = new int(6);
delete pi;
因此,如果在树中放置新元素,则必须为它们分配内存,如果删除元素,则必须使用delete进行破坏。你必须要关心不要打破清单。