私はこの条件にバグがありますこれはVisual Studio 2010のコンパイラエラーですか?
while(CurrentObserverPathPointDisplacement > lengthToNextPoint && CurrentObserverPathPointIndex < (PathSize - 1))
{
CurrentObserverPathPointIndex = CurrentObserverPathPointIndex + 1;
CurrentObserverPathPointDisplacement -= lengthToNextPoint;
lengthToNextPoint = (CurrentObserverPath->pathPoints[min((PathSize - 1),CurrentObserverPathPointIndex + 1)] - CurrentObserverPath->pathPoints[CurrentObserverPathPointIndex]).length();
}
しばらくリリースモードで無限ループにはまり込むように思われます。デバッグモードでは正常に動作、または私は最後の行にデバッグプリントを入れて、よりinterstinglyたときにここで
OutputInDebug("Here");
自体条件のために生成されたアセンブリである:
while(CurrentObserverPathPointDisplacement > lengthToNextPoint && CurrentObserverPathPointIndex < (PathSize - 1))
00F074CF fcom qword ptr [dist]
00F074D2 fnstsw ax
00F074D4 test ah,5
00F074D7 jp ModelViewData::moveCameraAndCenterOnXYPlaneForwardBackward+27Eh (0F0753Eh)
00F074D9 mov eax,dword ptr [dontRotate]
00F074DC cmp eax,ebx
00F074DE jge ModelViewData::moveCameraAndCenterOnXYPlaneForwardBackward+27Eh (0F0753Eh)
{
あなたは第二のためにそれを見ることができます条件では、bool型の関数パラメータである 'dontRotate'の値をeaxに移動して比較すると思われますが、dontRotateはそのコードの近くでは使用されません。
私はこれがちょっとしたデータではないことを理解していますが、個人的に明らかなコンパイラエラーのようです。しかし、悲しいことに、実際にバグレポートを作成するのに十分な問題を含んでいる自己にそれを引き出す方法がわかりません。
編集: は実際の減速が、型ではない:
double CurrentObserverPathPointDisplacement;
double lengthToNextPoint;
int CurrentObserverPathPointIndex;
int PathSize;
vector<vector3<double>> CurrentObserverPath::pathPoints;
EDIT2:私はしばらくの最後にデバッグprint文に追加すると、これが取得するアセンブリ
ですもはやバグを発現する、発生していない:
while(CurrentObserverPathPointDisplacement > lengthToNextPoint && CurrentObserverPathPointIndex < (PathSize - 1))
00B1751E fcom qword ptr [esi+208h]
00B17524 fnstsw ax
00B17526 test ah,5
00B17529 jp ModelViewData::moveCameraAndCenterOnXYPlaneForwardBackward+2D6h (0B175A6h)
00B1752B mov eax,dword ptr [esi+200h]
00B17531 cmp eax,ebx
00B17533 jge ModelViewData::moveCameraAndCenterOnXYPlaneForwardBackward+2D6h (0B175A6h)
{
これは、コードに対応する指示には見えません。 – wallyk
まず、識別子を少し短くすることができました。しかし、何が起きているのかを理解するには、どのようなタイプが関係しているのかを知ることが役に立ちます。 – bitmask
長すぎる行を折り返してください。 –