随机指针和递归崩溃

问题描述 投票:-1回答:1

我正在尝试使用递归函数绘制骨骼。我的目标是在根骨骼上运行IterateBones,以将指向矢量的指针插入指向Bones结构以及所有其他孩子的孩子的指针;

struct Bone
{
    int Id;
    std::vector<Bone*> BoneChild;
};
void IterateBones(aiNode* t,Bone* b,std::vector<Bone>& Bones, std::map<std::string,Bone*> Map)
{
        for(int g = 0 ; g<t->mNumChildren;g++)
        {
            Bone* Bon = Map.find(t->mChildren[g]->mName.data)->second;
            b->BoneChild.push_back(&Bones[Bon->Id]);
            IterateBones(t->mChildren[g],Bon,Bones,Map);
        }
    return;
}

aiNode * t是指向骨骼节点的asimp指针,

Bone * b是当前迭代的骨骼的指针

std :: vector&Bones是对其他类内骨骼的向量的引用

std :: Map通过Bones向量中的名称将指针映射到Bone结构

我的问题是,代码正常运行75%的时间,但是程序崩溃的25%的时间。我尝试使用DBG进行调试,但是它一次给了我segfault,而其他时候却没有任何错误。任何人都可以解释为什么会发生这种情况以及如何防止这种情况发生,因为我有一段类似的代码,但是大多数时候它会崩溃

im将GC ++与mingw-w64一起使用

c++ pointers recursion opengl assimp
1个回答
0
投票

问题已通过@john和@ EMarci15在注释中解决,它需要保留Bones Vector

Bones.reserve(500)
© www.soinside.com 2019 - 2024. All rights reserved.