0
Cでのバイナリ検索ツリー:メインでセグメンテーションフォールト、私はこの機能を使ってツリーにデータを挿入したい
struct treeNode{
data* val;
struct treeNode *left, *right, *parent;
};
void insert(data *d, struct treeNode **leaf, struct treeNode **leaf_par)
{
if(*leaf == 0)
{
*leaf = (struct treeNode*) malloc(sizeof(struct treeNode));
(*leaf)->val = d;
/* initialize the children to null */
(*leaf)->left = 0;
(*leaf)->right = 0;
/* initialize the parent */
(*leaf)->parent = *leaf_par; //here I receive segmentation fault
}
else if(strcmp(d->name, (*leaf)->val->name) < 0)
{
insert(d, &(*leaf)->left, &(*leaf));
}
else if(strcmp(d->name, (*leaf)->val->name) > 0)
{
insert(d, &(*leaf)->right, &(*leaf));
}
}
は私が持っている:
struct treeNode *root = NULL;
data d1 = {"Smith"};
insert(&d1, &root, NULL);
セグメンテーションフォールトがあります:
(*leaf)->parent = *leaf_par;
初めて* leaf_parがNULLで、なぜ正しく動作していないのかわかりません。挿入機能をどのように修正すればよいですか? "親"ポインタがなければ簡単ですが、私は "親"でそれを行う必要があり、それは動作していません。
明らかに、あなたは '** leaf_par'に' NULL'を渡していますが、 '* leaf_par'へのアクセスを試行します。この場合、親は何をしたいですか?そのケースをチェックし、それに応じて設定する必要があります。 – lurker