指定已指定指针

时间:2016-02-11 16:47:53

标签: c++ pointers

我想弄清楚一些,因为我认为我的代码中存在愚蠢的错误,但我不确定我发现的是什么,所以我想要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_boxprevious_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

1 个答案:

答案 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)行。

最可能的原因是:thisthis->parent_groupthis->parent_group->GetParent()current_box->trees(对于current_box的任何值)并未指向有效的对象或数组。或ijk中的一个超出数组范围。