C ++指针在函数调用后失去继承值。

时间:2016-12-28 18:03:18

标签: c++ pointers tree

我的作业涉及AVL树和等级树。 在这个特定的赋值中,我们需要实现一个Rank AVL树,它在节点中保存另一个信息。

我有这个问题:
我创建了一个AVL树,对于Rank树,我选择使用继承。
在Rank树的“Insert”函数中,我调用另一个名为“setAllHeights”的函数,它接收一个节点作为参数。
但是,当我在参数的调试器中看到值时,我看到该函数接收到NULL指针。
我不明白为什么因为在我输入“setAllHeights”函数之前,我检查了参数的值,它绝对不是NULL。
可能是什么问题,为什么会发生?

我非常感谢你的帮助。


函数Insert的代码:

template<class T, class Compare>
bool RAVL<T, Compare>::insert(const T& data) {
    if (root == NULL) {
        root = new (nothrow) RNode<T, Compare>(data, NULL);
        if (!root)
            throw AllocationError();
        size++;
        return true;
    }
    Compare cmp;
    RNode<T, Compare> *v;
    if (find(data, &v))
        return false;
    if (cmp(v->data, data)) {
        v->right = new (nothrow) RNode<T, Compare>(data, v);
        if (!v->right)
            throw AllocationError();
    } else {
        v->left = new (nothrow) RNode<T, Compare>(data, v);
        if (!v->left)
            throw AllocationError();
    }
    Node<T,Compare> * n=v;
    AVL<T,Compare>::setAllHeights(n);
    rebalance(v);
    size++;
    return true;
}


setAllHeights函数的代码:

template<class T, class Compare>
void AVL<T, Compare>::setAllHeights(Node<T, Compare> *n) {
    if (n == NULL) {
        return;
    }
    setHeight(n);
    setAllHeights(n->parent);
}

1 个答案:

答案 0 :(得分:1)

在我看来,你没有初始化v,因此当你将它分配给n时,它也没有被初始化。你需要调用v = new RNode(...),或者你的逻辑。