私はセグメント化されたツリーを作成しようとしていますが、ここで不良メモリアロケーションエラー - セグメントツリー
は、ツリーのノードのための私の構造体である:
struct Node{
int x1, x2; // x coordinates
int y1, y2; // y coordinates
Node * v1;
Node * v2;
Node * v3;
Node * v4;
bool oBo; //check if 1 by 1
bool O;
bool F;
int dimens;
Node(int myx1, int myx2, int myy1, int myy2){
this->x1 = myx1;
this->x2 = myx2;
this->y1 = myy1;
this->y2 = myy2;
this->dimens = abs(x2 - x1);
if (dimens == 1)
{
this->oBo = true;
}
else
this->oBo = false;
this->O = false;
this->F = false;
this->v1 = NULL;
this->v2 = NULL;
this->v3 = NULL;
this->v4 = NULL;
}
};
これは地図
のための私のコンストラクタですMapTree::MapTree(int iSize)
{
this->size = iSize;
root = new Node(0, size, 0, size);
segment(root);
}
このセグメント関数を使用してルートのサブセグメントを作成しています。次に、関数はルートのサブノードなどで再帰的に呼び出されます。私は2番目のセグメントに不良メモリ割り当てを取得します。すなわち、dimens = 2のとき、なぜこれが起こっているのか分かりません。値とサイズを変更して修正しようとしましたが、ビジュアルスタジオでは特定のメモリ位置に不良メモリ割り当て以外の明確なエラーはありません。ここ
は、セグメント機能である:
void MapTree::segment(Node * node)
{
while (node->oBo != true)
{
int dimension = node->dimens;
node->v1 = new Node(0, dimension/2, 0 , dimension/2);
node->v2 = new Node(dimension/ 2, dimension, 0, dimension/ 2);
node->v3 = new Node(0, dimension/2 , dimension/2, dimension);
node->v4 = new Node(dimension/2, dimension, dimension/2, dimension);
segment(node->v1);
segment(node->v2);
segment(node->v3);
segment(node->v4);
}
と最後ではなく、少なくとも木に指定されたサイズは常に2のべき乗であるので、セグメントは常にずつの大きさになってしまうしようとしていますone
このような問題を解決する適切なツールは、デバッガを使用することですが、デバッガを使用する前にスタックオーバーフローを尋ねるのではなく、行単位でコードを検査する際に行ったすべての観察を教えてください。 –
TL; DR;おそらく、初期化されていない変数を使用して、いくつかのメモリを割り当てようとしています。 –