short형 변수를 %d로 입력받은 게 문제인 것 같습니다.
N = 100000인 경우에 메모리 영역을 침범할 수 있을 것 같아요
9465번 - 스티커
%d는 int형 변수에 값을 입력받는 방법이기 때문에, 입력으로 들어온 주소값에서부터 4byte만큼의 범위에 입력을 받아 값을 변경합니다.
short형의 a[100001][2]; 에 입력을 받는다고 하면, 이것은 2*100001*2 = 400004byte에 해당하는 메모리 영역이 할당되어 있을 것이고,
a[100000][1]의 주소값은 400002byte에 해당하는 위치가 되겠죠.
따라서, scanf("%d", &a[100000][1]);로 입력을 받는다면 400002~400006byte 범위에 입력을 받습니다.
a 배열을 400004byte까지만 할당되어 있으므로, 여기서 메모리 침범이 발생할 수 있습니다.
a[100001][2]; 대신 a[100001][3];으로 선언하신 경우, 메모리 영역은 600006byte까지 할당되어 있고, a[100000][1]의 주소값은 600002byte에 해당하는 위치가 되어,
600002~600006byte 범위에 입력을 받아 정상적으로 처리됩니다.
댓글을 작성하려면 로그인해야 합니다.
wksms21 7년 전
5번줄에서
short a[100001][2];
여기서 2를 3으로 바꾸면 정상동작하는데 왜그러는지 도저히 모르겠습니다 도와주세요ㅠㅠ