#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) 이외에는 메모리를 아끼기위한 운영체제의 할당방식으로 사라진다는 것이다.
'코딩Language(전공)' 카테고리의 다른 글
[전공_시스템프로그래밍] 정수(Integer) 부호확장 (0) | 2019.09.09 |
---|---|
[전공_시스템프로그래밍] 정수(Integer) 데이터타입 (0) | 2019.09.09 |
[자바] 클래스와 객체 _ 설계도로 클론을 만들어보자 (1) | 2019.08.12 |
[ 리눅스 ] 사전지식2 Internet vs Web (0) | 2019.07.20 |
[ 리눅스 ] 사전지식 (0) | 2019.07.20 |