지난 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의 값이고, 문자열은 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;
성병 : : 문자열 's'가 항상이 모양 함수에 전달되는 : "얼굴 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
[짧고 독립적 인 예제] (http://sscce.org)를 만들어보십시오. – Xeo
여기서 추측 할 만하지만, 'hi'와 같은 문자열을 가지고 있다면,'+ 1'은'substr'을 잘못된 위치에서 시작하도록 요구할 것입니다. –