私はすべての資料をここに入れてしまいました。 使用する構造体をいくつか作成しましたが、操作しようとするとこのエラーが発生します。どんな助言も謝罪されるでしょう!不完全な型へのポインタの逆参照中にエラーが発生しました。理由はわかりません
struct sp_kdarray_t
{
SPPoint* points;
int** sorted;
int rows;
int size;
};
struct sp_kdarrays_t
{
SPKDArray kdLeft;
int leftSize;
int rightSize;
SPKDArray kdRight;
};
KDArray.c
で定義され、KDArray.hに我々が持っているように、これらの構造体です:typedef struct sp_kdarray_t* SPKDArray;
typedef struct sp_kdarrays_t* SPKDArrays;
今、私は(再帰的にツリーを構築する)それらを操作しようとする中次の関数:
012:KDTreeNode recursiveTreeBuild(SPKDArray kdArr, int size, SP_TREE_SPLIT_METHOD spKDTreeSplitMethod, int splittingDimension)
{
int split;
KDTreeNode result;
result = (KDTreeNode)malloc(sizeof(KDTreeNode));
if (result == NULL)
{
spLoggerPrintError("Memory Allocation ERROR", __FILE__, __func__, __LINE__);
return NULL;
}
if (size == 1)
{
result -> dim = -1;
result -> val = -1;
result -> left = NULL;
result -> right = NULL;
result -> data = spKDArrayCopyPoint(kdArr, 0);
if (result -> data == NULL)
{
spLoggerPrintError("Memory Allocation ERROR", __FILE__, __func__, __LINE__);
return NULL;
}
}
else
{
SPKDArrays subtrees;
subtrees = spKDArraySplit(kdArr, splittingDimension);
if (subtrees == NULL)
return NULL;
result -> dim = splittingDimension;
result -> val = spKDArrayGetMedianValueByDimension(kdArr, splittingDimension);
result -> data = NULL;
switch (spKDTreeSplitMethod)
{
case MAX_SPREAD:
split = spKDArrayGetHighestSpread(kdArr);
if (split < 0)
return NULL;
break;
case RANDOM:
srand(time(NULL));
split = rand() % spKDArrayGetDimensions(kdArr);
break;
case INCREMENTAL:
split = splittingDimension + 1;
break;
}
result -> left = recursiveTreeBuild(subtrees -> kdLeft, subtrees -> leftSize, spKDTreeSplitMethod, split);
result -> right = recursiveTreeBuild(subtrees -> kdRight, subtrees -> rightSize, spKDTreeSplitMethod, split);
}
return result;
}
私は "逆参照エラー" を取得
result -> left = recursiveTreeBuild(subtrees -> kdLeft, subtrees -> leftSize, spKDTreeSplitMethod, split);
result -> right = recursiveTreeBuild(subtrees -> kdRight, subtrees -> rightSize, spKDTreeSplitMethod, split);
ありがとうございます!
「KDTreeNode」とは何ですか?それはポインタのtypedefですか? – LPs
"デバッグのヘルプを求める質問(「なぜこのコードは動作しないのですか?」)には、目的の動作、特定の問題またはエラー、および質問自体に再現するのに必要な最短コードが含まれている必要があります。最小、完全、および検証可能な例**](http://stackoverflow.com/help/mcve)」を参照してください。 –
原則として、ヘッダファイルに構造体を定義する必要があります。 – immibis