코딩Language(전공)

[ C언어 ] 지역변수의 값을 반환 = 無의미

Nerdogger 2019. 7. 18. 23:00
#include <stdio.h>

int* clean() {
  int arr[2];

  arr[0] = 100;
  arr[1] = 200;

  int* p = arr;
  return p;
}

int main(void) {
  int* arr = clean();

  printf("arr[0] : %d\n", arr[0]);
  printf("arr[1] : %d\n", arr[1]);

  return 0;
}

위 코드와 왼쪽 구조를 보면 메인함수에서 포인터변수 arr에 사용자지정함수인 clean의 반환값인 지역변수 p를 넣는다.

 

이 프로그램을 실행하면 arr[0]값은 100으로 나오지만, arr[1]값은 200이 나오지 못하고 쓰레기값이 나온다.

 

이 이유는 clean함수가 종료되고 p값을 반환한 후에 clean함수에게 할당된 메모리는 비활성화되며, 이후 실행되는 printf함수가 그 위에 덮어쓰기 되는 방식으로 소멸된다.

즉, 반환된 p의 값(=arr) 이외에는 메모리를 아끼기위한 운영체제의 할당방식으로 사라진다는 것이다.