C 언어 기초

C 언어에서 (1) 함수 안에서 static을 붙이지 않고 선언한 지역 변수, (2) malloc으로 확보한 영역, (3) 함수 밖에서 선언한 변수가 각각 존재하는 기간(수명)의 조합으로 올바른 것은?

  1. A(1) 프로그램 종료까지, (2) 확보한 함수에서 돌아올 때까지, (3) 프로그램 종료까지
  2. B(1) 선언한 블록에서 빠져나올 때까지, (2) free로 해제할 때까지, (3) 프로그램 종료까지
  3. C(1) 선언한 블록에서 빠져나올 때까지, (2) 프로그램 종료까지(도중에는 해제할 수 없음), (3) 그 변수를 처음 사용한 함수에서 돌아올 때까지
정답과 해설 보기

정답: B. (1) 선언한 블록에서 빠져나올 때까지, (2) free로 해제할 때까지, (3) 프로그램 종료까지

(1)의 자동 변수는 일반적으로 스택에 놓이며, 선언한 블록에 들어갈 때 만들어지고 빠져나오면 사라집니다. (2)의 malloc으로 확보한 영역은 힙(heap)에 놓이며, 함수에서 돌아와도 남아 있고 free로 해제할 때까지 사용할 수 있습니다. (3)의 함수 밖의 변수(및 static을 붙인 변수)는 프로그램이 실행되는 동안 계속 존재하며, .data나 .bss 같은 정적 영역에 놓입니다. 수명이 끝난 영역을 가리키는 포인터를 사용하는 것이나, free를 잊어 영역이 계속 남는 것이 흔한 실수의 원인이 됩니다.

이 분야 연습하기 분야로 돌아가기

C 언어 기초의 다른 문제

  1. int는 32비트(최댓값 2147483647)로 한다. 위의 함수 fact(n)이 n의 계승을 오버플로 없이 올바르게 반환하는 최대의 n은?
  2. int는 4바이트, 포인터는 8바이트로 한다. int형에 대한 포인터 p의 값(주소)이 0x1000일 때, p + 3의 값은?
  3. int는 4바이트, 포인터는 8바이트로 한다. 위의 프로그램을 실행했을 때의 출력으로 올바른 것은?
  4. int는 4바이트로 한다. 위의 코드를 실행했을 때의 출력으로 올바른 것은?
  5. 문자열을 넣은 char 배열에 대해, 위의 코드를 실행했을 때의 출력으로 올바른 것은?