我正在尝试使用递归函数绘制骨骼。我的目标是在根骨骼上运行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一起使用
问题已通过@john和@ EMarci15在注释中解决,它需要保留Bones Vector
Bones.reserve(500)