코딩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) 이외에는 메모리를 아끼기위한 운영체제의 할당방식으로 사라진다는 것이다.