windowAPI

WindowApi 6강 - range기반 for문의 주의점

rimugiri 2024. 11. 23. 01:54
728x90

range기반의 for문의 경우는 메모리를 참조하여 그 공간을 순회한다.

하지만 vector의 경우 사이즈가 늘어나면서 capacity가 커지게 되면 새로운 메모리 공간에 할당받게 되어 메모리 주소가 달라지는 경우가 발생하기때문에 for문 도중 벡터의 크기가 늘어가게되면 시스템이 종료된다

예를들으면 이러한 경우다

for(auto& a : myVec){
a = 1;
myVec.push_back(1);
}

또는 멀티쓰레드 혹은 비동기 환경에서 이러한 에러가 발생할 수 있기 때문에 이를 방지하기 위해서는 락을 걸어주거나 for문이 다 돈다음 myVec의 push_back을 보장해 주는것이 필요해 보인다 그것도 귀찮다면 인덱스 방식의 for문을 사용하면 원하는 결과는 아니겠지만 시스템 종료는 되지 않는다

728x90