我想獲得一個C++程序,它可以在使用gcc進行編譯時正常工作,以在Visual C++上正常工作。我的問題是,我現在得到以下錯誤: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();
}
}
}
}
在其中使用的矢量的每一行簡單地把brealpoints不是一種選擇,因爲循環迭代數千次不必按每次繼續將從字面上看,我花了數小時有什麼辦法可以告訴調試器在錯誤發生時在適當的線路上制動,以便我可以檢查變量並確定哪一個超出範圍?
你應該嘗試使用callstack。查找你寫的第一個函數。 – JBL
例如,你也可以告訴視覺只能在'i> something'後面打破。這是一個有條件的斷點。 –
@JBL對不起,我對VC++很感興趣,你能向我解釋一下應該怎麼做? – Gerharddc