如何解决释放模式导致在调试模式下工作的循环中的无限循环
因此,下面是一个while循环,该循环可在调试中工作,但在释放模式下无限循环。
Ans FindMaxProj(polyShape& S,Matrix<float,3,1>& N,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是一个extern变量。我也使用CodeBlocks和默认的编译器设置。请让我知道是否需要提供更多信息。
解决方法
这是浮点数的舍入错误。我将float变量“ proj”四舍五入到小数点后五位,以便if检查不会被错误触发,并且现在可以使用了。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。