2018년 6월 9일 토요일

GCC 컴파일러와 VC++ 컴파일러의 Associative container (set, map)의 Iterator 처리 차이점


  • Content

VC++은 연관 컨테이너인 set과 map에서 iterator 변수가 begin()인 시작 iterator를 가지고 있을때, -- 연산자를 하게되면 end() 로 가게된다.

GCC는 end()가 아닌 바로 그 전의 주소값을 접근한다. (잘못된 메모리 접근)


  • Ex


std::set<int> s;
std::map<int, int> m;

bool sb = false;
bool mb = false;

s.insert(2);
s.insert(3);

auto iter1 = s.begin();

iter1--;

sb = iter1 == s.end();

m[1] = 2;
m[2] = 3;

auto iter2 = m.begin();

iter2--;

mb = (iter2 == m.end())

댓글 없음:

댓글 쓰기