728x90
반응형
for (auto itr = m_elems.begin(); itr != m_elems.end(); ++itr)
{
if (itr->second->locking && !ignore_locked_obj)
continue;
m_elems.erase(itr);
}
map을 사용하여 조건을 통한 삭제를 실행하려 했는데, runtime error가 발생한다. 조건을 만족하는 iterator가 나타났을 때 해당 iterator를 지워버리면 해당 iterator는 end가 되어 버렸다. erase 하면 pos 값이 날아가버려서 그런가 보다. 미리 복사해 둬야 에러를 발생시키지 않는다.
for (auto itr = m_elems.begin(); itr != m_elems.end();)
{
if (itr->second->locking && !ignore_locked_obj)
++itr;
else
m_elems.erase(itr++);
}
이렇게 고치니까 에러가 나질 않는다.
728x90
반응형
'Program Language > C & C++' 카테고리의 다른 글
C4430 : missing type specifier - int assumed. (0) | 2023.12.15 |
---|---|
/SAFESEH (이미지에는 안전한 예외 처리기가 있습니다.) (0) | 2022.10.12 |
[C++] List 에서 pair로 된 데이터 찾기 (0) | 2022.09.21 |
[C++] C#에서 사용할 수 있게 Lib 만들기 (0) | 2022.09.15 |
[C++] C#에서 사용할 수 있게 Lib 만들기 (CLR Class) (0) | 2022.09.15 |