0

より適切なタイトルを提案していただければ、私は永遠にあなたのお世話になります。

問題: 私は本質的に再帰的な関数を持っています。それは、各クワッドから各子を取得し、元の呼び出し元に返すことを目的としています。問題は、(コンソール ウィンドウで) プログラムを実行するたびに次のように表示されることです。

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;
...
};
4

2 に答える 2

1

子供はvector<Quad>またはvector<Quad*>?の場合vector<Quad*>、この行は間違っています:

Quad *child = &children[i];

ポインタのアドレスを取るからです。それで

child->get_children_recursive(player_pos)

おそらくあなたが得ているエラーにつながるでしょう。

これを修正するには、を削除するだけ&です。

于 2012-08-22T07:46:55.300 に答える
0
for (int j = 0; j < childs_children.size() - 1; j++)  {

for (int j = 0; j < childs_children.size(); j++)  {
于 2012-08-24T06:09:10.903 に答える