• 카테고리

    질문 & 답변
  • 세부 분야

    프로그래밍 언어

  • 해결 여부

    미해결

print_binary_loop

21.12.09 11:40 작성 조회수 134

0

void print_binary_loop(unsigned long n)

{

int i, j, ary_num = 0;

int bin[] = {0};

 

for (i = 0; n > 0; n = n / 2, i++)

{

if ((n / 2) != 0)

bin[i] = n % 2;

else

bin[i] = 1;

 

ary_num += 1;

}

 

for (j = ary_num - 1; j >= 0; j--)

printf("%d", bin[j]);

 

printf("\n");

}

아직 c언어 배열은 안배웠지만 파이썬 배열과 다를게 없다 생각해서 기본적인 문법만 구글링하면서 써봤습니다.

제가 직접 루프를 짜봤는데 교수님꺼보단 많이 복잡하지만,,,

실행시킬 때마다 이런 오류가 뜨고 무시를 누르면 잘 실행이 되기는 합니다. 이 오류를 고치고 싶은데 방법을 모르겠습니다 ㅠ

 

답변 1

답변을 작성해보세요.

0

안소님의 프로필

안소

2021.12.12

답변이 늦어 죄송합니다

bin 배열은 크기가 1 입니다. 원소가 0 하나 밖에 없으며, 하나의 int 원소만 들어갈 수 있는 배열입니다. (질문자님께서 이렇게 선언을 하셨습니다)

배열은 한번 크기를 정하면 자유자재로 늘렸다 줄였다 할 수가 없습니다. 그냥 고정 크기에요.

즉, bin[0] 만 쓸 수 있다는 것입니다. bin[1] 부터는 배열 크기를 넘어선, 즉 할당받지 않은 메모리에까지 침범하는 일인 것이라서 런타임 에러가 발생하게 됩니다. 

근데 질문자님의 for문을 보면 bin[i] 를 쓰고 있기 떄문에 i 에는 어떤 값이든 들어갈 수가 있어요. 

n 이 0 이 될 때까지 2 로 계속 나눠지는 수 만큼 i 가 증가하겠죠.. 

그러니 bin[1], bin[2] ... 에도 접근할 수 있을테니 에러가 나는 것입니다.