본문 바로가기

프로그래밍 활용(TIP)

[프로그래밍 습관] 함수를 만들때 꼭 기억해야 하는것 중 하나..


함수를 만들면서 함수의 리턴타입이 void 인 경우도 있을것이고, data 타입이 지정되는 경우도 있을것이다.
보통 기능 위주로 생각을 하다보니 한가지 놓치는점이 있다.

그것은 data의 생성과 소멸시점에 대한 부분이다.
지역변수는 생성과 함께 stack 영역에 저장했다가 함수가 탈출하는 시점에서 자동 소멸하게끔 되어있다.
만약 지역변수로써 함수 내에 선언한 변수를 return 해버리는 경우에는 심각한 문제가 발생할수 있다.

그래서 지역내에서 생성한 함수를 리턴할 필요가 있을때는 static 키워드를 통해 전역변수화 시켜줘야 한다.

지금 생각해보면 프로그래밍을 하면서 수많은 함수들을 만들었었는데, 이러한 개념을 이해하고 있으면서도 실제로 만들때 지역변수를 리턴했던 경우가 다수 있었던것 같다. 주의하자...


말나온김에 정리해놓자.
* 데이터의 할당과 저장되는 메모리 영역
- 지역변수 : stack 영역 (지역에서 할당되어 지역이 끝나는 시점에서 자동 소멸)
- 전역변수 : data 영역(static 키워드를 이용해 지역에서 선언한 변수도 이곳에 할당됨) 프로그램의 구동시 할당되고, 프로그램이 끝나는 시점에서 소멸
- 동적할당 : heap 영역( 사용자에 의해 할당되는 영역이며, new나 malloc 키워드로 할당할 크기를 지정해줘야 한다. 반드시 delete 나 free 키워드를 통해 해제해 주지 않으면 소멸되지 않는다.)