我想弄清楚一些,因为我认为我的代码中存在愚蠢的错误,但我不确定我发现的是什么,所以我想要SO社区来判断我的想法是不是正确的。
在我的代码中的某个时刻,我正在树上移动来对每个元素进行计算。基本代码如下所示:
Quadtree* current_box = this->parent_group->GetParent();
Quadtree* previous_box = this->parent_group;
while(true)
{
for(int i=0;i<2;i++)
{
for(int j=0;j<2;j++)
{
for(int k=0;k<2;k++)
{
if(current_box->trees[i][j][k] == previous_box)
continue;
else
//do some math
}
}
}
previous_box = current_box;
if(current_box->GetParent()==nullptr)
{
break;
}
current_box = current_box->GetParent();
}
以及稍后在代码中的其他位置,当我想将值分配给此对象的某个字段时,所有内容都会中断,并且有关于此的分段错误的一些指示:
if(current_box->trees[i][j][k] == previous_box)
行。
我想这里可能会发生的是那两行
previous_box = current_box;
current_box = current_box->GetParent();
搞乱了一切。因为如果我是正确的,我没有为current_box
和previous_box
分配新的指针值,但是我将这些值分配给已存在的指针,所以我对地址有些不满。我是否认为正确?
换句话说,我是否将this->parent_group->GetParent()
分配给this->parent_group
的地址?
修改
我看到我的问题可能不明确,所以让我改一下 - 在
之后 previous_box = current_box;
//...
current_box = current_box->GetParent();
我的previous_box
价值是current_box
,还是我会将current_box
的值分配给this->parent_group
?
答案 0 :(得分:1)
我没有为current_box和previous_box分配新的指针值,但是我将这些值分配给已存在的指针,所以我的地址有些混乱。我是否认为正确?
您正在指定指针值。赋值后,指针中的值消失了。在两个分配后,previous_box
指向current_box
过去指向的对象,current_box
指向该对象的父级。
换句话说,我将this-&gt; parent_group-&gt; GetParent()分配给this-&gt; parent_group的地址?
this->parent_group->GetParent()
是一个功能。该函数返回的值不会被赋值修改。
分段错误:
if(current_box->trees[i][j][k] == previous_box)
行。
最可能的原因是:this
,this->parent_group
,this->parent_group->GetParent()
或current_box->trees
(对于current_box
的任何值)并未指向有效的对象或数组。或i
,j
或k
中的一个超出数组范围。