pmch0325   3년 전

입력한 테스트케이스 (test.txt 파일) 내용은 아래입니다.

2 20 50

50 30

20 40

19번째 줄에 if( arr[row][col]<50 ) return;

는 디버깅하면서 재귀가 더 들어가지 않게 임시로 넣어논 줄입니다.

이 코드에서 문제가 되는 부분은 18번째 줄입니다.

unionsc[1]이 2이상이 되면은 코드가 먹통이 됩니다...

unionsc[1] 값을 1로 고정해버리면 코드가 실행은 됩니다.

이게 왜 문제가 되는건지도 모르겠는데 더 이해가 안되는 점은 이걸 실행하면 정말 말그대로 먹통이 되어서 18번째 줄까지 가기 전에 메인함수에서 먼저 실행돼야할 테스트용 출력함수도 실행이 안돼서 출력이 아무것도 안뜨고 프로그램이 종료되거나 아니면 무한루프처럼 아무반응이 없습니다.

solution함수에 무한루프가 있긴 한데 여기를 바꿔봐도 똑같은 현상인걸 봐서는 이 부분 문제도 아닌거같습니다.

그리고 무한루프 문제라면 앞에 출력함수는 출력이 되고 무한루프가 되야 하는건데 이건 뭐가 문제인건지 감을 못잡겠습니다.

도와주세요ㅠㅠㅠㅠㅠㅠ

clrmt   3년 전

디버거를 켜기만 해도 people_move에서 stack overflow가 발생한다고 나옵니다. 디버거를 끄고 33번째 줄 arr[row][col] = num;에다가 브레이크포인트를 걸고 다시 디버거를 켭니다. 그러면 33번째 줄에서 코드가 중단되어 있고, 밑에 변수 조사식에다가 row, col, num을 입력해 둡니다. 그리고 재생을 반복해 누르면 people_move 함수가 (0, 0, 33), (0, 1, 33)의 인자로 무한히 번갈아 호출된다는걸 알 수 있습니다.

pmch0325   3년 전

감사합니다!!!!!

저도 어찌어찌 하다가 그 부분을 발견하고 고치긴 했는데 왜 앞의 출력이 나오지 않고 아예 터져버린건지는 아직 잘 이해가 안되네요

여태 디버거를 쓰지 않고 출력함수로 체크하면서 디버깅을 했는데 디버거를 써야하는 경우가 있군요... stack overflow에 대해서 한번 알아봐야겠어요 감사합니다

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