newsanghoon   3년 전

bfs 구현함수는 똑같은데 선언 해주는 부분에서 차이 때문에 run time Error가 발생하더라구요. 그래서 선언되는 순서를 바꿨는데 맞았습니다. 두 코드에 어떤 차이가 있어서 에러가 났는지 궁금합니다.

djm03178   3년 전

이렇게 부분만 보면 알 수가 없습니다. 전체 코드를 올려주세요.

원인은 아마도 bfs 함수 내에서 배열의 범위를 벗어난 인덱스에 접근했는데 그 위치가 우연히 다른 변수의 위치에 해당해서 에러가 나느냐 안 나느냐로 갈리는 것이겠지만, 둘 다 원칙적으로 잘못된 코드인 점은 같을 것입니다.

newsanghoon   3년 전

죄송합니다 나머지 코드 추가하여 수정했습니다.

djm03178   3년 전

nowValue - 1은 0 이상인지를 확인해야지, 100000 이하인지를 확인하는 건 무의미합니다. 이 때문에 음수 인덱스로 나아가게 되어 문제가 발생합니다.

newsanghoon   3년 전

넵 그 부분은 이전에 깨닫고 고쳐서 맞았습니다. 근데 제가 궁금했던건 아래 위 코드 둘다 nowValue - 1은 0 이상인지를 확인하지 않았는데 위에 코드는 정답으로 나오고 아래 코드는 런타임 에러가 나와서 이부분이 궁금했습니다.

djm03178   3년 전

그건 첫 답변에 말씀드렸습니다. 배열의 범위를 벗어난 곳에 접근하는 건 undefined behavior이고, 이는 무슨 일이 일어나도 이상하지 않음을 의미합니다. 저렇게 선언했을 때 컴파일러가 무슨 최적화를 수행해서 변수의 주소가 어떻게 바뀌고 그로 인해 같은 음수 인덱스에 어떤 변수가 위치할지 등등은 프로그래머 입장에서는 전혀 알 수 없고 어떠한 가정도 해서는 안 되며, 그저 운이 좋아서 특정 배치가 정답을 도출할 수 있게끔 이루어졌다면 정답을 받을 뿐입니다.

newsanghoon   3년 전

정성스럽게 댓글 달아주셔서 감사합니다. 

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