二分探索木を作成しようとしていますが、値を挿入しようとすると、より正確には NULL ポインターが関数に渡されると、しばらくフリーズしてからクラッシュします。コードは次のとおりです。
void create(int co, struct node **leaf){
if(*leaf==0){
(*leaf)=malloc(sizeof(**leaf));
(*leaf)->val=co;
(*leaf)->left=0;
(*leaf)->right=0;
}
else if(co<(*leaf)->val){
create(co, &(*leaf)->left);
}
else if(co>=(*leaf)->val){
create(co, &(*leaf)->right);
}
}
なぜそうするのかわかりません。説明できますか?
編集:関数の最初の呼び出しは次のようになります。
struct node *root;
root=0;
for(i=0;i<c;i++){
create(f[i], &root);
}
ここで、c は配列内の要素の数です。そして、これは構造体の定義です:
struct node{
int val;
struct node *left;
struct node *right;
};
したがって、問題はここに投稿したコードにはありません。コード全体をここで見つけることができます。質問全体を書き直して、コード全体をここに投稿する必要がある場合は、commnets で saz してください。できるだけ早く修正しようとします。
答えを見つけた実際に問題なく通過した後create
、プログラムを台無しにした最後の 1 つの間違いを見つけることができました。でした*i++;
。どうやら ++ は、値が指されているとうまく機能しません。書き直した後*i=*i+1;
、ようやく動作するようになったので、私を助けてくれたすべての人に感謝し、最後の質問をしたいと思います: と の違いは何*i++;
ですか*i=i+1;
?