指针和递归的随机崩溃

random crashes with pointers and recursion

我正在尝试使用递归函数映射骨骼。我的目标是 运行 IterateBones on root bone 以插入指向指向 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 是指向骨骼节点的 assimp 指针,

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

std::vector& Bones 是对其他 class

中骨骼向量的引用

std::Map 是按骨骼向量中的名称映射到骨骼结构的指针

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

我在 mingw-w64 上使用 GC++

@john 和@EMarci15 在评论中解决了问题,需要保留 Bones Vector

Bones.reserve(500)