dreammusic23   8년 전

대체 어디서 런타임 에러가 난 걸까요...?

동적배열이 문제인거 같아서 동적배열 말고 그냥 [105][105][105]로 선언해줘도 똑같은 오류가 납니다 ㅠ...

의심가는건 배열 범위가 문제되는 경우 밖에 없는데 아무리 다시봐도 문제는 없는 것 같아서요..


대체 어디가!!! 문젠가요 ㅠㅠ


맨처음엔 문제 잘못읽어서 -1이 안익은 토마토 0이 빈칸인줄알고 풀었다가 틀렸는데...

고치니까 런타임이라뇨 ㅠㅠ

ntopia   8년 전

queue 배열 길이를 넘어가는 것으로 보이네요.

직전 bfs를 부를 때 방문했던 칸을 다음 bfs를 부를 때 또 방문할 가능성이 있으므로

front, rear  가 100*100*100 을 넘어갈 수 있을 것 같네요.

bfs 부를 때 마다 front, rear를 초기화 시켜 보세요.

ntopia   8년 전

그리고 제가 이 소스를 직접 돌려보니까 다른 문제도 있네요.

check를 malloc을 통해 동적할당하셨는데요, malloc이 초기화까지 수행해주진 않습니다.

따라서 malloc한 직후에는 쓰레기 값이 들어있는 상태고요.

예제를 넣어보니 90번째 줄에서 flag의 값도 덕분에 쓰레기값이 들어가있네요.

변수 초기화 부분도 수정해보시는게 좋을 것 같습니다.

dreammusic23   8년 전

말씀하신대로 수정을 해 봤습니다...

bfs돌때마다 초기화 했고, 동적할당 하지않고 그냥 배열을 0으로 초기화해서 사용했습니다..


하지만 아직도 컴파일 에러가.. ㅠㅠㅠ

ntopia   8년 전

음..

check[x+1][y][z]>check[x][y][z]

이 조건문들이 문제인 것 같네요. 이것 때문에 안가도 되는 곳을 계속 queue에 집어넣어서

queue가 엄청 빨리 터지겠네요.


check[x+1][y][z]>check[x][y][z]+1

이 되어야 하지 않을까요?

실제로 그 밑에서

check[x+1][y][z]=check[x][y][z]+1;

이렇게 하고 있으니까요

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