minsung05   3년 전

아무리 봐도 OutOfBound에러는 아닌거 같은데

어디가 잘못되었는지 봐주실 수 있나요?

kysu5095   3년 전

아 간단한 질문같아서 머리 식힐겸 봤다가 거의 한시간은 고민했네요ㅠㅠ

일단 로직상에는 문제가 전혀없습니다.

16번째줄에 const auto& p = q.front(); q.pop(); 라고 사용하셨는데

현재 p는 q.front()를 참조하고있습니다. 참조형(reference)에 대해서는 질문자께서 사용하셨으니 

어떤 의미를 가지는지 알것이라 생각합니다.

const auto& p = q.front()로 참조를 하자마자

q.front()를 pop해버리면 p는 어디를 가르킬까요??? 자신이 가르키고있던 주소가 사라지면 뭐 쓰레기값을 가르킬 것 같습니다.

때문에 여기서 문제를 해결할 수 있는 방법은 두가지 정도라고 생각합니다.

1. reference를 사용하지 않고 const auto p = q.front()를 하여 새로운 p를 할당하는 방법

2. q.pop()을 24번째 이후에 추가

저도 reference가 메모리나 속도측면에서 좋아서 많이 사용하는데 여기서 이렇게 당할지 몰랐네요ㅠ

추가로 앞으로 bfs관련 문제를 풀다보면 방향이동하는 코드를 많이 짜시게 될텐데 23-44줄 처럼 모든 경우를 

다 구현하시면 실수도 나오고 코드가 길어집니다.

https://seoftware.tistory.com/... 대충 구글링해서 괜찮은 예제 찾아봤는데 해당 코드처럼

dy, dx라는 배열로 방향을 손쉽게 구현할 수 있습니다. 한번 봐보세요. 무슨 원리인지 생각해보시구요

위를 이해하면 뭐 8방향이든 체스의 나이트처럼 이동하는것들 모두 쉽게 구현할 수 있습니다~

minsung05   3년 전

우와... 너무 감사합니다! 이런 문제가 있을줄이야

gyhn123   3년 전

@kysu5095 친절한 답변 감사합니다!

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