我有一个 TreeSet 类,用c ++描述了一棵树:
class TreeSet
{
private:
AVLNode * root;
int count;
protected:
void clearRec(AVLNode*root);
public:
TreeSet();
~TreeSet();
void clear();
// print out the set in ascending order
friend ostream& operator<<(ostream& os, const TreeSet& t);
int add(int val);
}
和 AVL节点类来表示AVl节点:
class AVLNode {
public:
int key; // data
AVLNode* left; // left child
AVLNode* right; // right child
int balance; // balance factor
AVLNode(int key) {
this->key = key;
left = right = NULL;
balance = 0;
}
AVLNode(int key, int balance) {
this->key = key;
this->balance = balance;
left = right = NULL;
}
};
这是我在TreeSet中没有任何内容时实现add函数的实现
int TreeSet::add(int val) {
if (root == NULL) {
AVLNode newNode(val);
root = &newNode;
count++;
}
}
主要功能:
int main() {
TreeSet set, temp, *subSet;
ifstream ifs;
ifs.open("input.txt");
char command;
int val;
try
{
while (ifs >> command) {
switch (command) {
case 'a': // add an element to the set
ifs >> val;
set.add(val);
break;
}
}
}
}
但是当我有一行txt文件时 4
它不会在屏幕上打印出4。你能帮我解决这个问题吗?
答案 0 :(得分:2)
AVLNode newNode(val);
root = &newNode;
newNode是局部变量,您可以使用指向此var的指针,但是newNode
在add
方法的结尾超出了作用域,因此您有悬空的指针。您需要通过new
运算符在堆上分配AVLNode:
root = new AVLNode(val);