指针和递归的随机崩溃



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

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

std::vector&骨骼是指其他类中骨骼的矢量

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

我的问题是,75%的时候代码运行得很完美,但25%的时候程序崩溃了。我试着用DBG进行调试,但它给了我一次segfault,其他时候它运行时没有任何错误。有人能解释为什么会发生这种情况,以及我如何防止这种情况发生吗?因为我有类似的代码,但它大多数时候都会崩溃

使用带有mingw-w64 的GC++的im

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

Bones.reserve(500)

最新更新