因此,下面是一个while循环,它在调试模式下工作,但在发布模式下无休止地循环。
Ans FindMaxProj(PolyShape& S,Matrix<float,3,1>& N, Matrix<float,3,1>& cg, int StartInd){
MaxFound=false;
MaxIndInit=StartInd;
MaxValue=(cg+S.Verts.col(MaxIndInit)).transpose()*N;
while(!MaxFound){ //Infinitely loops in release mode, works in debug
MaxFound=true;
MaxInd=MaxIndInit;
for(int i=0; i<S.EdgeLinks[MaxInd].size();i++){
proj=(cg+S.Verts.col(S.EdgeLinks[MaxInd][i])).transpose()*N;
if(proj>MaxValue){
MaxFound=false; //Causes infinite looping in release mode
MaxValue=proj;
MaxIndInit=S.EdgeLinks[MaxInd][i];
}
}
MaxInd=MaxIndInit;
}
MaxCall.Value=MaxValue;
MaxCall.Ind=MaxInd;
return MaxCall;
}
我知道它会无休止地循环,因为如果我为发布模式添加迭代上限,循环就会成功结束。S.EdgeLinks是int向量的一个向量。我在用Eigen做矩阵数学。此外,传入的S是一个外部变量。此外,我使用默认编译器设置的CodeBlocks。请告诉我是否应该提供更多信息。
这是浮点运算中的舍入错误。我四舍五入浮点变量";proj";到小数点后5位,这样if检查就不会错误触发,现在它可以工作了。