我正在尝试使用C
中的struct创建一个树#include<stdio.h>
#include<stdlib.h>
struct node{
int data;
struct node * next, * left, * right;
};
struct node * createtree(int data){
struct node * kosong = (struct node*)malloc(sizeof(struct node*));
kosong->data = data;
kosong->left = kosong->right = NULL;
return kosong;
}
void printtree(struct node * tree){
if(tree == NULL) return;
printtree(tree->left);
printf("%d ",tree->data);
printtree(tree->right);
}
int main(){
struct node * pohon = NULL;
pohon = createtree(1);
pohon->left = createtree(2);
pohon->right = createtree(3);
pohon->left->left = createtree(4);
pohon->left->right = createtree(5);
printtree(pohon);
}
每当我编译它时会出现分段错误。然后我尝试删除*下一个指针,它编译&amp;运行成功。我知道树不需要* next指针,但我不明白为什么它不会因为另一个相同的指针而编译。 感谢您的帮助。
答案 0 :(得分:0)
帮助您理解错误:
函数createtree(int data)中的第一行:
struct node * kosong = (struct node*)malloc(sizeof(struct node*));
实际应该是
struct node * kosong = (struct node*)malloc(sizeof(struct node));
因为您正在为结构节点分配内存,而不是指向结构节点的指针。
这就是你的段错的真正原因。我编译代码只修复了这个错误,它工作得非常好。 当然你应该尝试初始化所有指针和变量,因为不这样做可能会以未定义的行为结束,这可能是任何事情,就像分段错误一样。