gcc でコンパイルして Visual C++ で正しく動作する C++ プログラムを取得しようとしています。私の問題は、次のエラーが発生していることです。
Debug Assertion Failed!
Program: C:\WINDOWS\SYSTEM32\MSVCP110D.dll
File: c:\program files (x86)\microsoft visual studio 11.0\vc\include\vector
Line: 1140
Expression: vector subscript out of range
私の本当の問題は、これがいつ、どこで起こるかわからないことです。エラー ウィンドウでブレークを押すと、例外が最終的に発生したベクター クラスの部分に移動するだけです。アプリケーションで実際に原因となった場所を見つけたい。このコード ブロックに絞り込むことができました。
for(unsigned int i=0;i<openPolygonList.size();i++)//error somewhere in here
{
if (openPolygonList[i].size() < 1) continue;
for(unsigned int j=0;j<openPolygonList.size();j++)
{
if (openPolygonList[j].size() < 1) continue;
Point diff = openPolygonList[i][openPolygonList[i].size()-1] - openPolygonList[j][0];
int64_t distSquared = vSize2(diff);
if (distSquared < 2 * 2)
{
if (i == j)
{
polygonList.push_back(openPolygonList[i]);
openPolygonList.erase(openPolygonList.begin() + i);
}else{
for(unsigned int n=0; n<openPolygonList[j].size(); n++)
openPolygonList[i].push_back(openPolygonList[j][n]);
openPolygonList[j].clear();
}
}
}
}
ベクトルが使用されている各行に単純にブレークポイントを配置することはオプションではありません。なぜなら、ループは何千回も繰り返され、毎回 [続行] を押さなければならないのは文字通り何時間もかかるからです。エラーが発生したら、デバッガーに適切な行でブレーキをかけるように指示する方法はありますか? 変数を調べて、どの変数が範囲外かを判断するのに役立ちますか?