尝试实现二叉树时的分段错误

时间:2013-12-27 13:12:56

标签: c++ data-structures segmentation-fault binary-tree

我正在尝试在C ++中实现二叉树结构。 我想要一个'8'深度的树,即我想要一个带有1个attribute_node的attribute_struct和2个指向其他2个attribute_struct的指针来制作二叉树。 这是我定义的数据结构及其创建方法:

struct person{
    public :
        char name[20];
};

struct attribute_node{
    int attribute;
    person * child_person;
};
struct attribute_struct{
    attribute_node head_node;
    attribute_struct * yes_node;
    attribute_struct * no_node;
};

attribute_struct initialize_struct(attribute_struct initial_struct, int prop){
    if(prop < 8){
        attribute_struct new_yes_struct, new_no_struct;

        attribute_node temp_yes_node, temp_no_node;
        temp_yes_node.attribute = prop;
        temp_yes_node.child_person = NULL;
        temp_no_node.attribute = prop;
        temp_no_node.child_person = NULL;
        new_yes_struct.head_node = temp_yes_node;
        new_no_struct.head_node = temp_no_node;
        new_yes_struct.yes_node = NULL;
        new_no_struct.yes_node = NULL;
        new_yes_struct.no_node = NULL;
        new_no_struct.no_node = NULL;

        attribute_struct temp_yes_struct = initialize_struct(new_yes_struct, prop+1), temp_no_struct = initialize_struct(new_no_struct, prop+1);
        initial_struct.yes_node = &temp_yes_struct;
        initial_struct.no_node = &temp_no_struct;
        return initial_struct;
    }else{
        person temp_person;
        strcpy(temp_person.name, "temp");
        initial_struct.head_node.child_person = &temp_person;

        return initial_struct;
    }
}
attribute_struct create_initial_attribute_structure(){
    attribute_struct main_structure;
    attribute_node temp_node;
    temp_node.attribute = 3;
    temp_node.child_person = NULL;
    main_structure.head_node = temp_node;
    main_structure.yes_node = NULL;
    main_structure.no_node = NULL;
    main_structure = initialize_struct(main_structure, 1);
    return main_structure;
}

好吧,当我尝试使用下面的结构时,我遇到了分段错误。

int main(){
    attribute_struct main_struct = create_initial_attribute_structure();
    attribute_struct * current_head;
    current_head = &main_struct;
    int iter = 0;
    while(iter < 7){
        current_head = (*current_head).yes_node;
        cout << iter << endl;
        iter++;
    }
    return 0;
}

我无法确定数据结构是否创建错误,或者我是否以错误的方式引用它。我使用gdb但是在主函数中它没有参数我无法推断出任何东西。

seg故障是在打印之后2。 那么,我如何确定attibute_struct定义是否正确并且是否具有8级深度或者我是否引用了NULL对象? 使用if(current_head == NULL)cout&lt;&lt; “错误”;在while循环中没有帮助。

1 个答案:

答案 0 :(得分:2)

您正在调用create_initial_attribute_structureyes_node设置为NULL

然后将current_head设置为yes_node,这是NULL

然后下一次迭代你解除引用current_head

您正在引用NULL