ohyeah92929   7년 전

cbe633ff7d8378b13bed80ea651ab5e6.png

arr[-123][-1] 값이 정해지는 것이 정상인가요?

아래 코드를 그대로 사이트에 제출했는데도 런타임 에러가 떠야 되는 걸로 알고 있는데, '틀렸습니다'가 뜹니다. 원래 이런가요?

tuna   7년 전

음수 인덱스에 접근시 런타임 오류나는것이 맞습니다만,
올려주신 코드에서는 음수에 접근하기전에
 i - 1 >= 0 에 의해서 음수 접근은 걸러집니다.


그외에 경우에서 계산이 잘못되서 "틀렸습니다"가 뜨는듯 싶군요.


Visual Studio에서는 왜 보이는지 모르겠네요
그냥 보이는 것 같고, 접근하는 순간 에러 뜰거 같아요.

ohyeah92929   7년 전

if 조건문 안에서 첫번째 조건 먼저 검사하지 않나요??

첫번째 조건 검사할때 arr[-1][0]에 접근해서 에러가 떠야할 것 같다고 생각했습니다..

tuna   7년 전

맞네요 && 우선순위는 왼쪽-> 오른쪽일텐데;;

yukariko   7년 전

C / C++ 언어는 음수인덱스에 접근하는것을 따로 검사하지 않습니다.

그런데도 런타임에러가 발생하는것은, 음수 인덱스 접근을 통해 할당받지 않은 메모리를 접근했기 때문입니다.

즉 음수 인덱스에 접근했다 하더라도 할당받은 메모리를 접근한다면 에러가 발생하지 않는것이죠.

그래서 그런코드가 정답을 받는 경우도 종종 있습니다.

하지만 이것은 어디까지나 컴파일러, OS에 따라 다르기때문에 주의해야 합니다.


yukariko   7년 전

참고로 제 추측이 맞다면 현재코드는 arr의 음수인덱스를 통해 day 배열을 접근하고 있을것입니다.

day배열이 넉넉하기 때문에 런타임에러가 발생하지 않는것 같습니다.

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