指针,矢量列表=大量混乱

时间:2012-08-22 07:37:35

标签: c++ pointers stdvector dynamic-memory-allocation

如果你能建议一个更合适的头衔我会永远欠你的债。

问题:我有一个本质上是递归的函数,它的目的是从每个四元组中获取每个孩子并将其返回给原始调用者。问题是我每次运行程序时都会得到以下内容(在我的控制台窗口中):

This application has requested the Runtime to terminate it in an unusual way.
Please contact the application's support team for more information.

我的目标是将每个孩子都检索为指针。

以下是来电者:

std::vector<Quad*> children = root->get_children_recursive(player_pos);

以下是功能本身:

std::vector<Quad*> Quad::get_children_recursive(glm::vec3 player_pos)  {
    std::vector<Quad*> out_children;

    if (children.size() != 0)  {
        for (int i = 0; i < children.size(); i++)  {
            Quad *child = &children[i];

            std::vector<Quad*> childs_children = child->get_children_recursive(player_pos);

            for (int j = 0; j < childs_children.size() - 1; j++)  {
                Quad *childs_child = childs_children.at(j);

                out_children.emplace_back(childs_child);
            }
        }
    }

    if (this->should_draw(player_pos))  {
        out_children.emplace_back(this);
    }

    return out_children;
}

如果您希望我提供更多代码或任何其他详细信息,我将非常乐意为您服务。

(每当我尝试使用调试器并且程序到达导致上述错误的行时,我会得到一个BSOD:O)

修改

部首:

class Quad  {
    public:
...
        std::vector<Quad*> get_children_recursive(glm::vec3 player_pos);
...
    protected:
    private:
...

        std::vector<Quad> children;
...
};

2 个答案:

答案 0 :(得分:1)

儿童是vector<Quad>还是vector<Quad*>?如果是vector<Quad*>,则此行错误:

Quad *child = &children[i];

因为它会占用指针的地址。然后

child->get_children_recursive(player_pos)

很可能会导致您遇到的错误。

要解决此问题,请删除&

答案 1 :(得分:0)

for (int j = 0; j < childs_children.size() - 1; j++)  {

for (int j = 0; j < childs_children.size(); j++)  {