Учу C, читаю С.Скиену, компилирую clang-ом (больше нравится вывод в случае ошибок). Дочитал до двоичных деревьев. Ниже код
#include <stdlib.h>
#include <stdio.h>
typedef struct tree{
int item;
struct tree *parent;
struct tree *left;
struct tree *right;
} tree;
tree *search_tree(tree *l, int x);
void traverse_tree(tree *l);
int insert_tree(tree **l, int x, tree *parent);
int main(int argc, char *argv[]){
tree *l;
insert_tree(&l, 0, NULL);
return 0;
}
tree *search_tree(tree *l, int x){
if(l == NULL){
return(NULL);
}
if(l->item == x){
return(l);
}
if(x < l->item){
return(search_tree(l->left, x));
}
else{
return(search_tree(l->right, x));
}
}
void traverse_tree(tree *l){
printf("%d\n", l->item);
traverse_tree(l->left);
traverse_tree(l->right);
}
int insert_tree(tree **l, int x, tree *parent){
tree *p;
printf("step1\n");
if(*l == NULL){
printf("step2\n");
p = malloc(sizeof(tree));
p->item = x;
p->left = p->right = NULL;
p->parent = parent;
*l = p;
return 0;
}
if(x < (*l)->item){
printf("step3\n");
insert_tree(&((*l)->left), x, *l);
}
else {
printf("step4\n");
insert_tree(&((*l)->right), x, *l);
}
return 1;
}
step1
step2
step1
step4
step1
Ошибка сегментирования (сделан дамп памяти)
Ubuntu clang version 3.4-1ubuntu3 (tags/RELEASE_34/final) (based on LLVM 3.4)
gcc version 4.8.2 (Ubuntu 4.8.2-19ubuntu1)