0

だから私はバイナリツリーに値を追加する完成したプログラムを持っています。次に、値を事前注文、事後注文、および順番に一覧表示できます。これで、すべてが非常にうまく機能します。ただし、deleteAll関数を実行するとプログラムが不安定になり、値を追加したり、ツリーを一覧表示したりすると、セグメンテーション違反が発生する可能性があります。何が悪いのか正確にはわかりません。私はまだCに慣れておらず、何が原因であるかを把握できません。それは明らかにdeleteAll関数にあるので、ここにあります...

void deleteAll(node* *hd){
    node* curr = *hd;
    if(curr->left != NULL){
        deleteAll(&curr->left);
    }
    if(curr->right != NULL){
        deleteAll(&curr->right);
    }
    free(curr);
}

すべてを削除して任意の順序で一覧表示すると、321294124などの値が表示されます。これは、存在しない場合に指定される値です。だから私はそれは大丈夫だと思います、しかし多分それは問題です。

4

1 に答える 1

2
void deleteAll(node* *hd){
if(*hd != NULL){
    node* curr = *hd;
    if(curr->left != NULL){
        deleteAll(&curr->left);
    }
    if(curr->right != NULL){
        deleteAll(&curr->right);
    }
    free(curr);
    *hd = NULL;
}
}

それを理解しました、arrowdodgerに感謝します。

于 2012-11-28T16:58:31.757 に答える