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、別の関数でアクセスしようとすると、場所が問題なく表示され、配列にアクセスできます。

問題はポインターからポインターへのポインターであることに気付きました。 を呼び出すときにアスタリックを 1 つだけ配置するとinsert_KD_function、プログラムは問題なく tree->pointer にアクセスできます。したがって、問題はポインターへのポインターに関係しており、何らかの方法でポインター参照が失われています。

誰でも私を助けることができますか?

4

1 に答える 1

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

ルートがあれば上書きするということではないですか?そうではない== NULLでしょうか?

それとは別に、 kd- treesが update でうまく機能しないことに注意してください。更新が多い場合は、バランスのとれた R* ツリーを使用する方がよいでしょう。それ以外の場合は、ツリーの構造に注意して、バランスが崩れすぎている場合は、再度一括ロードします。

于 2012-10-11T19:51:27.563 に答える