结构更改的指针

时间:2018-12-19 15:44:57

标签: c++ null

#include<stack>
#include<iostream>

class Tree{
    private:
        struct tree{
            int val;
            tree * lChild;
            tree * rChild;
            tree * Parent;
        };
        tree *root;
    public:
        Tree();
        void insert(int x);
};

Tree::Tree(){
    root = NULL;
    std::cout<<"ROOT inside constructor : "<<root<<std::endl;
}

void Tree::insert(int x){
    tree *wst;
    wst->val = x;
    wst->lChild = NULL;
    wst->rChild = NULL;

    tree *temp = root;
    tree *p = NULL;


    std::cout<<"ROOT inside insert : "<<root<<std::endl;

    while(temp != NULL){
        p = temp;
        if(x < temp->val)
            temp = temp->lChild;
        else
            temp = temp->rChild;
    }

    std::cout<<x<<std::endl;

    wst->Parent = p;

    if(p == NULL){
        root = wst;
    }
    else{
        if(x < p->val)
            p->lChild = wst;
        else
            p->rChild = wst;
    }

}


int main(){
    Tree tree;

    tree.insert(404);

}

我想检查指针根是否等于NULL,但似乎不太可行。当我进入方法插入时,指针似乎从0变为0x4。如何检查struct的指针是否等于NULL?

EDIT在insert方法中,如果树没有任何节点,则它不应该在while循环中首先输入,因为根应该等于NULL。我的问题是,无论如何它都会进入此循环,并在检查临时子项(仍未定义)时崩溃。

1 个答案:

答案 0 :(得分:4)

wst指向什么?

tree *wst;
wst->val = x;
wst->lChild = NULL;
wst->rChild = NULL;
// [...]
wst->Parent = p;

哇!您的程序具有未定义的行为。难怪它崩溃了。 :)

您可能需要tree* wst = new tree();。别忘了也将delete的节点放在Tree析构函数中!

我建议不要使用类型Tree和类型tree;或许可以叫后者Node