我一直在調試過去2小時的這個錯誤,並且知道我自己如果在睡覺之前沒有尋求幫助,我將無法入睡。我正在爲我的遊戲編寫一個模型加載器,而現在我正在使用一種非常簡單的方法來拆分字符串。然而,它在幾乎相同的線上工作,然後隨機不。我使用string.substr(),我相信這個錯誤意味着它試圖從一個不存在於字符串中的位置開始。調用堆棧說,它在這條線發生:令人困惑的「std :: out_of_range」錯誤
v1 = v1.substr(s.find(",")+1);
,並使用它打印消息斷點,它說
頂點1使用「1,1」,整個字符串是「 173,1,1 175,1,1 174,1,1「
其中,頂點1是v1的值,而string是s的值。
這是整個功能:
FaceData data;
s = s.substr(5); //remove "FACE "
string v1, v2, v3;
//vertex 1
v1 = s.substr(0, s.find(" "));
data.vertexIndexes[0] = atoi(v1.substr(0, s.find(",")).c_str());
v1 = v1.substr(s.find(",")+1);
data.textureIndexes[0] = atoi(v1.substr(0, s.find(",")).c_str());
v1 = v1.substr(s.find(",")+1);
data.normalIndexes[0] = atoi(v1.c_str());
//vertex 2
s = s.substr(s.find(" ")+1);
v2 = s.substr(0, s.find(" "));
data.vertexIndexes[1] = atoi(v2.substr(0, s.find(",")).c_str());
v2 = v2.substr(s.find(",")+1);
data.textureIndexes[1] = atoi(v2.substr(0, s.find(",")).c_str());
v2 = v2.substr(s.find(",")+1);
data.normalIndexes[1] = atoi(v2.c_str());
//vertex 3
s = s.substr(s.find(" ")+1);
v3 = s;
data.vertexIndexes[2] = atoi(v3.substr(0, s.find(",")).c_str());
v3 = v3.substr(s.find(",")+1);
data.textureIndexes[2] = atoi(v3.substr(0, s.find(",")).c_str());
v3 = v3.substr(s.find(",")+1);
data.normalIndexes[2] = atoi(v3.c_str());
return data;
中的std :: string的'傳遞給函數總是看起來是這樣的: 「FACE X,X,XX,X,XX,X, X「 其中x是一個數字。
這是我能找到的分割字符串的唯一途徑...
現在,我不明白爲什麼它在這裏得到這個錯誤...好像它幾乎只發生隨機。我不明白爲什麼它不會與
173,1,1 175,1,1 174,1,1
工作,但它會與
175,2,2 176,2,2 175,2,2
在某人能夠發現問題之前,您可能需要粘貼更多來源。 – sarnold 2011-12-18 02:04:21
請嘗試創建一個[Short,self-contained,correct example](http://sscce.org)。 – Xeo 2011-12-18 02:05:20
只是在這裏猜測,但如果你有一個像'hi'這樣的字符串,'+ 1'可能會要求'substr'在一個無效位置開始。 – 2011-12-18 02:06:03