Ex56-함수의 결과로 지역 변수의 주소를 반환할 경우 경고가 발생하는 것 확인하기

CODEDRAGON Development/C, C++

반응형

   

함수의 결과로 지역 변수의 주소를 반환할 경우 경고가 발생하는 것 확인하기

   

   

학습내용

지역변수는 함수 종료시 메모리에서 사라지는데

이 사라진 주소의 메모리 주소를 p가 참조할 경우 문제가 발생합니다.

Warning 해결을 위해 지역변수를 static변수로 수정해 줍니다.

   

   

소스코드

   

#include <stdio.h>

//
함수의 선언
int* input();   //
입력값없이 함수를 처리한 다음 출력은 주소(int*) 처리(반환)

int main(void){
                int* p=NULL;

                p=input();              //
함수의 호출
                printf("%d \n", *p);

                return 0;
}

//
주소를 반환하는 함수의 정의
//int input(){
int* input(){

                int num;                //
지역변
//      static int num;         // static
변수 사용
                fflush(stdout);
                scanf("%d", &num);
                return &num;    // Warning

}       //
지역변수 num 메모리 공간에서 사라짐


   

   

출력결과

값은 출력될 수도 안될 수 도 있습니다. 값이 출력되더라도 정확한 결과는 될 수 없습니다.

   

eclipse Warning 발생

   

Visual Studio Warning발생

C4172: 지역 변수 또는 임시 변수의 주소를 반환하고 있습니다.