C++ STL vector iterator인데 런타임에서 문제가..
글쓴이: nzer0 / 작성시간: 토, 2010/04/03 - 1:56오전
STL 처음 익히고 있는데요
win32 프로젝트에 사용해서
성공적으로 빌드 후에 실행해보니까
런타임에서 에러가 발생하기에
브레이크포인트 걸고 디버깅 해보니까
초심자인 저로써는 난생 처음 접하는 황당한 장면을 목격했습니다
vector<Vertex> currPoly=polygons.back(); vector<Vertex>::iterator it; for(it=currPoly.begin();it!=currPoly.end();++it){ vector<Vertex>::iterator p1; vector<Vertex>::iterator n1; vector<Vertex>::iterator n2; if( it==currPoly.begin()){ p1=currPoly.end(); n1=it+1; n2=it+2; }else if( it==currPoly.end()-1){ p1=it-1; n1=it+1; n2=currPoly.begin(); }else if( it==currPoly.end()){ p1=it-1; n1=currPoly.begin(); n2=currPoly.begin()+1; }else{ p1=it-1; n1=it+1; n2=it+2; } int tmp; tmp=it->x; tmp=p1->x;
제가 첨부한 그림에도 나와있는 코드 일부분인데요
Vertex는 그냥 x,y만 가지고 있는 struct입니다
디버깅을 돌리면 그림처럼 n2와 tmp가 선언이 안된 것 처럼 나옵니다.
실제로 n1,p1에도 쓰레기값이 들어있어서 좀 돌다가 런타임 에러가 나더라구요.
귀찮으시겠지만
도와주세요ㅠ
Forums:
다시 보니 end()-1 부분은 조금 잘못 쓴 것 같네요
첫번째 else if 는 end()-2
두번째 else if 는 end()-1 로 고쳐야 할 것 같아요
end()가 마지막 다음을 가리키고 있다는 것을 깜박
그래도 여전히 선언이 안되어있는 것은 의문...
circular list처럼
circular list처럼 쓰시려고 하고 계시고, p1은 1단계 앞, n1, n2는 각각 1단계, 2단계 뒤를 가르키고 싶으신게 맞나요?
stl에는 circular list가 없는 것 같아서 circular_advance()를 구현해봤습니다. iterator traits에 따라 최적화할 여지가 있긴 합니다만 일단 돌아는 가는것 같네요 ㅎㅎ
감사합니다
감사합니다
stackoverflow에도 물어봤었는데
변수가 선언이 안되어있는 문제는 release로 빌드해서 그렇다네요..
ㄷㄷ 이런 실수를.. 너무 오랜만에 VS를 써서 설정을 못봤네요ㅠ
근데 release에서도 원래 디버깅이 가능한건가요?
댓글 달기