책 내용 질문하기
생성되지 않은 공간에 값을 할당하고 있습니다.
도서
2018 시나공 정보처리기사 실기(산업기사 포함)
페이지
187
조회수
27
작성일
2018-09-28
작성자
탈퇴*원
첨부파일

187p c언어 코드에서 13번~15번까지의 내용에 이의 있어 문의드립니다.

현재 배열은

int a[99]로 선언, 즉 총 99칸을 만들었음을 알 수 있습니다.

때문에 a[99]로 접근을 시도하면 100번째 칸이므로 접근이 안될 것입니다.

하지만 14번에서 m에 99를 허용하게 되면 15번에서 a[99]에 0을 넣는 것이 되므로 잘못된 접근이 되어버립니다.

m+=a[i];

이 부분때문에 m>99로 잡은 것은 이해하지만 m은 배열의 100번째 공간을 가리켜서는 안됩니다.

잘못생각하고 있는 부분이 있다면 알려주시기 바랍니다.

만약 제가 생각하는 것이 맞다면 추가로 알려진 이러한 오류들이 있는 부분들도 알려주셨으면 좋겠습니다.

답변
2018-10-01 18:40:12

안녕하세요. 길벗 수험서 운영팀입니다.

배열 a[99]는 2~100의 숫자를 저장하고 있습니다.

변수 m은 소수의 배수가 들어있는 위치를 지정하는 변수입니다.

이 경우 변수 m은 99라는 값을 가지지 못합니다.

앞의 알고리즘 구조상 배수가 2 또는 3인 경우 외에는 99값 근처로 접근하지 못합니다.

배수가 2인 경우(i[0]) m은 98, 100값을 가지면서 break

배수가 3인 경우(i[1]) m은 97, 100값을 가지면서 break

되면서 a[99]를 참조하는 경우는 존재하지 않게 됩니다.

a[99]가 만약 존재한다면 101값을 갖게 되는데, 101은 소수에 해당하는 값이라 i가 99일 때만 참조하는 경우가 발생하여, 8번 코드 if(i>98)에서 종료되는 해당 코드에서는 a[99]로 인해 에러가 발생하는 경우는 발생하지 않습니다.

행복한 하루되세요.^^

  • *
    2018-10-01 18:40:12

    안녕하세요. 길벗 수험서 운영팀입니다.

    배열 a[99]는 2~100의 숫자를 저장하고 있습니다.

    변수 m은 소수의 배수가 들어있는 위치를 지정하는 변수입니다.

    이 경우 변수 m은 99라는 값을 가지지 못합니다.

    앞의 알고리즘 구조상 배수가 2 또는 3인 경우 외에는 99값 근처로 접근하지 못합니다.

    배수가 2인 경우(i[0]) m은 98, 100값을 가지면서 break

    배수가 3인 경우(i[1]) m은 97, 100값을 가지면서 break

    되면서 a[99]를 참조하는 경우는 존재하지 않게 됩니다.

    a[99]가 만약 존재한다면 101값을 갖게 되는데, 101은 소수에 해당하는 값이라 i가 99일 때만 참조하는 경우가 발생하여, 8번 코드 if(i>98)에서 종료되는 해당 코드에서는 a[99]로 인해 에러가 발생하는 경우는 발생하지 않습니다.

    행복한 하루되세요.^^

· 5MB 이하의 zip, 문서, 이미지 파일만 가능합니다.
· 폭언, 욕설, 비방 등은 관리자에 의해 경고없이 삭제됩니다.