我正在尝试建立谷歌的液体乐趣库,但是在使用mingw的Windows上我得到了一个我有点难以接受的段错误。此方法中的编译失败
void b2ParticleSystem::CreateParticlesStrokeShapeForGroup(
const b2Shape *shape,
const b2ParticleGroupDef& groupDef, const b2Transform& xf)
{
float32 stride = groupDef.stride;
if (stride == 0)
{
stride = GetParticleStride();
}
float32 positionOnEdge = 0;
int32 childCount = shape->GetChildCount();
for (int32 childIndex = 0; childIndex < childCount; childIndex++)
{
b2EdgeShape edge;
if (shape->GetType() == b2Shape::e_edge)
{
edge = *(b2EdgeShape*) shape;
}
else
{
b2Assert(shape->GetType() == b2Shape::e_chain);
((b2ChainShape*) shape)->GetChildEdge(&edge, childIndex);
}
b2Vec2 d = edge.m_vertex2 - edge.m_vertex1;
float32 edgeLength = d.Length();
while (positionOnEdge < edgeLength)
{
b2Vec2 p = edge.m_vertex1 + positionOnEdge / edgeLength * d;
CreateParticleForGroup(groupDef, xf, p);
positionOnEdge += stride;
}
positionOnEdge -= edgeLength;
}
}
postionOnEdge + = stride;如果我发表评论说它会成功编译,那么这就是导致问题的因素,但显然会在运行时创建一个无限循环。我有点想法为什么它只会在mingw中导致seg故障,甚至将行更改为positionOnEdge + = 0.0f;导致它发生段错误。
答案 0 :(得分:0)
恭喜:您在编译器中发现了一个错误。无论你的源代码包含什么,编译器本身都不应该崩溃。
除了正式报告此错误之外,几乎没有什么可以做的。你可以试着找出究竟是什么让编译器脱离轨道试图绕过bug,但这最好是一个猜谜游戏。
您声称已将编译崩溃隔离到:
positionOnEdge += stride;
尝试以某种形式或方式更改代码。也许“positionOnEdge = positionOnEdge + stride;”对编译器来说是可口的。也许用对某些外部函数的函数调用替换它,通过引用传递这两个变量并在某些外部函数中执行加法,就可以了。xt / p>
当然,您可以随时检查您是否拥有最新版本的编译器。如果没有,请升级,并希望当前版本的编译器已修复该错误。