我正在尝试在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循环中没有帮助。
答案 0 :(得分:2)
您正在调用create_initial_attribute_structure
将yes_node
设置为NULL
然后将current_head
设置为yes_node
,这是NULL
然后下一次迭代你解除引用current_head
您正在引用NULL