树实现给出分段错误(核心转储)错误c ++ 11

Jim*_*ils 0 c++ tree segmentation-fault

最近,我用C++ 11编写了链表.使用这些概念,我尝试在C++ 11中编写树{一个非常基本的树}实现.但它给了我一个分段错误.我在网上查了一下,发现当程序试图写一个读访问内存或试图访问空闲内存时会发生这种情况,但我无法弄清楚它是如何发生在这里的.请帮忙..

#include<iostream>
#include<cstdlib>
using namespace std;
struct node{
    node *left;
    node *right;
    int key;
};
class tree{
    public:
    node *root;
    tree(){
        root->left=NULL;
        root->right=NULL;
    }
    node *createnode(int data){
        node *temp=new node;
        temp->key=data;
        temp->left=NULL;
        temp->right=NULL;
        return temp;
    }
};
int main(){
    tree t;
    node *root;
    root=t.createnode(1);
    //root->left=t.createnode(2);
    //root->right=t.createnode(3);
    //root->left->left=t.createnode(9);
    //root->left->right=t.createnode(7);
return 0;
}
Run Code Online (Sandbox Code Playgroud)

检查图像

Mil*_*nek 5

t.root是未初始化的,因此写入root->leftroot->righttree构造函数中调用未定义的行为.

现在,你的tree班级并没有多大意义.它包含一个root节点指针,但您从不使用它. createnode可能只是一个自由函数或静态成员node.更好treeinsert方法是完全封装节点,并且只需要一个方法来获取int,创建一个新节点,并将其插入树中的适当位置.