crud004   6년 전

8 8
2 0 0 0 0 0 0 2
2 0 0 0 0 0 0 2
2 0 0 0 0 0 0 2
2 0 0 0 0 0 0 2
2 0 0 0 0 0 0 2
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0

14502번 문제에서 위의 input을 map이라는 2차원 배열에 저장할때 생기는 문제입니다.

input의 각 element는 0,1,2중 하나의 상태이기 때문에 메모리 절약을 위해 char형으로 선언하였고

상태가 0인 element의 위치를 zero_location에 저장하였습니다.

예제를 테스트하는 과정에서 (0,1)이어야할 첫번째 0의 위치가 (0,0)으로 나타나길래 로그를 찍어봤더니

마지막줄 6번째의 input을 읽을때 뜬금없이 바뀌더군요...

아무리 생각해도 이해가 안가서 질문드립니다.

혹시 아시는분은 답변해주시면 감사하겠습니다.

27f30e1b-e246-4b7d-a9c9-19258f016f8c

jung2381187   6년 전

%d는 int 입력을 요구하는데 char형 변수를 넣으면 안 되죠.

scanf("%hhd", &map[i][j])로 쓰셔야 합니다.

ntopia   6년 전

char 형 변수를 %d 로 입력받으니 그런 에러가 생기는것같네요

%d가 들어오면 4바이트 전체를 채우기 때문에

char 배열에서는 그게 옆메모리 침범으로 일어나는거죠

crud004   6년 전

@jung2381187 @ntopia

메모리 침범의 문제였군요.

64번째나 32번째 input에서 바뀐다면 이해가 갔을텐데

52번째의 input이 0번째를 침범하고 다른 element들은 값 변화가 없다는게

컴퓨터는 참 알다가도 모르겠네요...ㅎㅎ

그리고 hhd는 처음알았는데 덕분에 한 수 배워갑니다.

두 분 답변 정말 감사드립니다!

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