我试图让一个 C++ 程序在使用 gcc 编译时可以正常工作,以便在 Visual 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();
}
}
}
}
简单地在使用向量的每一行放置断点不是一种选择,因为循环迭代数千次并且每次都必须按 continue 将花费我数小时。一旦发生错误,有什么方法可以告诉调试器在适当的线路上制动。它可以帮助我检查变量并确定哪个变量超出范围?