map<int, int> 남이 짠 코드를 좀 고치고 있다. 좀 코드가 거시기 하더라도 이해 해주셈. 이 코드를 돌렸을 때 18181818이 나와야할까? 안나와야할까? VC++의 STL 구현에서는 욕이 안나오는데 리눅스 gcc에서는 욕이 튀어나온다. map에 원소가 하나만 있고, pos가 맨 첫번째 원소를 가리키고 있을 때, -- 연산을 주면? gcc STL은 그대로 머무르고 VC++ STL은 싸이클을 그려 맨 끝 원소를 가리키도록 되어있다. 이 행동이 달라 두 플랫폼에서 결과가 다르게 나와 한참을 삽질 했다. 원래 코드의 의도대로라면 VC++ STL의 방식처럼, 즉 한 바퀴 돌아 end를 가리키는 것을 가정하고 만들어진 코드다. VC++에서는 문제가 없던 것이 gcc로 돌리니 이상한 현상이 종종 벌어졌고 그 이유가 바로 이런 예외 상황에서의 사소한 iterator의 -- 연산 정책 때문이었다. 문제는 원래 이 소스 코드가 리눅스 위에서 만들어 졌다는 점. 참고로 gcc는 버전이 3.4.6, VC++은 2008에서 돌린 코드. 이거때매 몇 시간 날린거지. 도대체 어떤 행동이 정확한 것일까요? 오늘의 교훈: STL 구현마다 이렇게 미묘한 행동 차이가 있다.
최근 등록된 덧글
개발자 입장에서의 수많은 ..
by Jiyoon at 02/04 저도 아들 돌잔치때 돌잡이 .. by 박상욱 at 01/18 미국 대학원 원서 작성중에 p.. by 태클사이야 at 01/13 TO: 박PD 로그인 하지 않아.. by 박응용 at 01/10 http://gigglehd.com/zbx.. by dhunter at 12/28 우와.. 좋네요. 태반이 .. by 윤광배 at 12/17 항상 좋은 글 잘 보고 있습니.. by y2k at 11/23 글이 좋아서 제 블로그에 담.. by 쏭섭 at 11/23 최근 등록된 트랙백
메뉴릿
이글루 파인더
|