2012-06-29 51 views
0
void insert_KD_tree(noKD **tree, Queue *queue, int counter) { 


    if ((*tree)!=NULL) { 
      *tree = new_KD_node(queue->first->pointer,NULL,NULL); 
    } 
    else if (((*tree)->pointer[counter]) > (queue->first->pointer[counter])) { 
      counter++; 
      insert_KD_tree(&(*tree)->left,queue); 
    } 
    else { 
      counter++ 
      insert_KD_tree(&(*tree)->right,queue,counter); 
    } 
    pop(queue); 
} 

好吧,所以這基本上是二叉樹插入函數,但是用於插入數組到節點。 數組存儲在隊列中,但我遇到指向指針的指針問題。 當我嘗試使用gdb訪問數組時,它給出消息,它無法訪問內存位置0x10,但如果我嘗試訪問它的另一個函數,它顯示我的位置就好了,我可以訪問數組。Kdtree插入函數

我注意到問題是指向指針的指針,如果我在調用insert_KD_function時只放一個asteric,我的程序可以訪問tree->指針而不會有任何問題。 所以這個問題與指向指針的指針有關,它以某種方式丟失指針引用。

任何人都可以幫助我嗎?

+0

當你創建一個新的樹節點時,是否將'left'和'right'指針初始化爲'NULL'? –

回答

0
if ((*tree)!=NULL) { 

難道這不是意味着,如果它存在,你覆蓋根源在哪裏?不應該是== NULL

除此之外,你不應該在更新上表現不佳。如果你有很多更新,你可能最好用一個平衡的R *樹。 否則,請注意樹的結構,如果太不平衡,請重新批量加載它。