minu0122   6년 전

1% 가고 바로 틀렸다고 나오는데 왜 틀렸는지 모르겠습니다

jh05013   6년 전

채점 환경은 비주얼이 아닙니다.

https://ideone.com/TjxOMH

minu0122   6년 전

비주얼하고 채점 환경하고 뭐가 다른건가요?

jh05013   6년 전

BOJ에서는 비주얼 스튜디오 말고 GCC를 채점 환경으로 사용합니다. 

https://www.acmicpc.net/help/l...

위에 링크한 ideone도 GCC를 사용하고, 예제 입력을 넣었을 때 아무것도 출력되지 않습니다.

minu0122   6년 전

printf를 여러번 썻는데 이런경우는 처음이라 어떻게 고쳐야할지 모르겠습니다ㅠㅠ

djm03178   6년 전

전 VS 2017이지만 역시 아무것도 안 뜹니다. 일단 num도 초기화가 안 됐고, 23번째 줄의 동작 원리도 모르겠네요.

minu0122   6년 전

23 번째 줄은 에라토스테네스의 체를 구현할때 지워나가는 역할을 하는 것으로 쓰였습니다

num을 초기화 하지 않은게 문제였던거 같네요 

https://ideone.com/TjxOMH에서 돌려보니 VS와 다르게 GCC는 어레이가 처음부터 0으로 입력되어있나 봅니다

감사합니다~

djm03178   6년 전

VS라고 다른 것이 아니라 지역 변수는 초기화가 되어 있지 않은 게 기본이고, 이 안의 내용물도 알 수 없습니다. 다만, 0이라는 값은 원래부터 메모리에 아주 많이 있을 가능성이 높은 거고요. 저도 VS 쓰지만 아무것도 출력되지 않았습니다.

minu0122   6년 전

제가 쓰는 VS는 메모리의 위치값을 나타내서 실행이 된것 같습니다

아무것도 입력을 안해주면 -858993460로 계산을 하고 있었습니다

djm03178   6년 전

그건 VS의 디버깅 모드에서만 나타나는 현상입니다. 요긴한 디버깅을 위해서 초기화를 하지 않을 시에 0xCCCCCCCC 라는 값으로 미리 채워둬주는 것입니다.

최적화를 한다는 가정 하에는 초기화되지 않은 값은 어떻게도 예측할 수 없습니다.

djm03178   6년 전

지금 제출해서 정답을 받으신 코드도 사실은 위험한 코드입니다. 초기화되지 않은 배열 원소의 값이 1일 가능성이 낮아서 걸리지 않았을 뿐이지, 반드시 1이 존재하지 않는다는 보장은 없습니다.

djm03178   6년 전

참고로, 0xCCCCCCCC 외에도 디버깅을 위해서 특정한 값으로 메모리를 채우는 것들이 있는데 이를 매직 넘버라고 합니다. https://en.wikipedia.org/wiki/... 에 예시들이 있습니다. 단, 언급한 대로 디버깅 모드에만 해당되는 것입니다.

minu0122   6년 전

좋은 정보 정말 감사합니다

오늘도 여러가지 배우고 가네요~!


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