2011-10-21 22 views
2

私はC言語でbstを実装しようとしていました。私はほとんどそこにいると思いますが、私のノードの追加機能では、currentという名前の一時ノードを作成します。木の中を訪れる。その後、現在のノードを変更すると、関数の終了後に私のorignalポインタは変更されません。Cバイナリ検索ツリーを実装する

私はこれについて読んだことがあります、私はポインタのポインタが必要かもしれないと思うが、私はかなり元の構造体を更新する方法を知らない。

+1

別の人が同じ運動をする前の日。宿題タグを追加してください... – Manos

+0

'malloc'の戻り値をキャストしないでください:http://stackoverflow.com/questions/1565496/specifically-whats-dangerous-about-casting-the-result-of-malloc – gnud

+2

なぜ問題はそこにあると思いますか? btw wtfはこれです: 'struct node ** current =&(* string) - > root;'? –

答えて

1

問題は、bstlist_addのポインタへのポインタと関係があります。ここでは、コード内で何を変更する必要があるかを理解するのに役立つ例を示します。

int a=10; 
int b=20; 

void noChange(int * pSomeInt); 
void change(int ** ppSomeInt); 

int main(int argc,char * argv[]) 
{ 
    int * pMainInt=&a; 

    noChange(pMainInt); 
    //pMainInt will still point to a 

    //since the parameter to change is int **, we have to use & here 
    change(&pMainInt); 
    //pMainInt now points to b 

    return 0; 
} 

void noChange(int * pSomeInt) 
{ 
    //while pSomeInt is a pointer, it is a copy of pMainInt, not a pointer to it 
    //so this creates a pointer to the parameter, pSomeInt, itself 
    int ** ppSomeInt=&pSomeInt; 

    //so this changes the parameter, pSomeInt 
    *ppSomeInt=&b; 
} 

void change(int ** ppSomeInt) 
{ 
    //ppSomeInt is a pointer to pMainInt, which is itself an int * 
    //so *ppSomeInt is pMainInt and not a copy of it 
    *ppSomeInt=&b; 
} 
+0

私が探していたすべてが例または説明だったので、私はマノスのようなユーザーがなぜそんなに押しつぶされているのか知りません。 – user557240

+0

ちょうど1つ最後のこと。特定のヘッダーを実装する必要があるため、パラメータをBst ** bstに変更することはできませんので、別の機能を追加するか、これを行うより良い方法はありますか? – user557240

+1

@ user557240:それは宿題の完全性についてのことです。宿題の問題に正しくタグを付けることができない場合、誰かが宿題を忘れてしまうかもしれません。だから、宿題に常にタグを付けて、あなたが今までに得たものを提供してください(たとえそれが正しくない場合でも)。人々はあなたの直面する不具合を補って、割り当てを損なうことなくmallocの戻り値のような付随的な解説を提供します。 – ccoakley

関連する問題