kangbada0728   5년 전

명령어 B를 수행할때 제가 사용한 명령어가 왜 런타임에러가 나는지 모르겠습니다.

저는 C++의 List 컨테이너를 이용해서 문제를 해결했습니다.

명령어 B를 수행할때 저는 cursor를 먼저 앞으로 한칸 움직여서 삭제하기 위한 글자의 위치에 놓고 erase로 삭제한다음

다시 커서를 뒤로 한칸 움직여 커서가 다시 뒤의 글자를 가리키게 했습니다.

그런데 런타임 에러가 나오더군요.

저는 이 방법이 왜 틀린지 모르겠습니다.

list 컨테이너의 erase 함수가 return해주는 값도 결국 삭제된 글자 바로 뒤의 글자의 위치이던데

제가 만든것과 무슨 차이가 있는지도 잘 모르겠고요.

제가 만든 방법이 어떤 경우에 틀린지 알려주시면 감사드리겠습니다.

djm03178   5년 전

erase를 수행하면 그 iterator는 invalidate됩니다. 그 순간 이후로 더 이상 사용이 불가능해진다는 의미입니다.

링크드 리스트를 생각한다면, 어떤 노드를 가리키는 포인터가 있고, 그 노드를 지운 후에 ptr->next에 접근하려는 것과 같습니다. 이미 없어진 노드인데 그의 멤버 변수에 접근해서는 안 되겠죠?

댓글을 작성하려면 로그인해야 합니다.