错误的内存分配错误 - 段树
bad memory alloc error - segment tree
我正在尝试创建一个分段树,
这是我的树节点结构:
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);
}
我正在使用 this segment 函数对根进行子分段,然后在 root 的子节点上递归调用 this 函数,依此类推。我在第二个段上得到了错误的内存分配。即当 dimens = 2 时,我不知道为什么会这样。我试图通过更改值和大小来修复它,但是 visual studio 没有提供任何明显的错误,除了在特定内存位置的错误内存分配。
这里是段函数:
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 的幂,因此这些段最终总是一个接一个的大小
没关系,我弄清楚出了什么问题,我想我在这里的问题措辞不正确。但经过一些调试后我发现了错误,从同一位置再次调用循环,因此无限内存分配。由于根节点->oBo 永远不会为真,因此无限循环和错误的内存分配。
我正在尝试创建一个分段树,
这是我的树节点结构:
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);
}
我正在使用 this segment 函数对根进行子分段,然后在 root 的子节点上递归调用 this 函数,依此类推。我在第二个段上得到了错误的内存分配。即当 dimens = 2 时,我不知道为什么会这样。我试图通过更改值和大小来修复它,但是 visual studio 没有提供任何明显的错误,除了在特定内存位置的错误内存分配。
这里是段函数:
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 的幂,因此这些段最终总是一个接一个的大小
没关系,我弄清楚出了什么问题,我想我在这里的问题措辞不正确。但经过一些调试后我发现了错误,从同一位置再次调用循环,因此无限内存分配。由于根节点->oBo 永远不会为真,因此无限循环和错误的内存分配。