지역변수의 주소를 반환해서 생기는 문제 2

CODEDRAGON Development/C, C++

반응형

   

지역변수의 주소를 반환해서 생기는 문제 2

func()함수는 배열의 주소를 반환하여 배열 요소들에 저장된 데이터를 출력하는 기능을 가지고 있습니다.

그러나 array가 함수 종료후 메모리에서 사라지므로 잘못된 실행결과를 출력하게 됩니다.

   

   

소스코드

   

#include <stdio.h>

//
함수의 선언
int* func();

int main(void){
                int* p=NULL;
                p=func( );              //
함수의 호출

                                                                // array[0], array[1], array[2], array[3], array[4]
                printf("%d %d %d %d %d\n", p[0], p[1], p[2], p[3], p[4]);
                                                                // *(array+0), *(array+1), *(array+2), *(array+3), *(array+4)
                printf("%d %d %d %d %d\n", *(p+0), *(p+1), *(p+2), *(p+3), *(p+4));
                return 0;
}

//
함수의 정의
int* func(){

                int array[ ]={10, 20, 30, 40, 50};      //
지역변
                return array;   //
경고 발생
}       // array
메모리 공간에서 사라짐


   

   

출력결과

p[i]값이 정상적으로 나온것 처럼 보이지만 정상인 값이 출력된 것이 아닙니다.

메모리에서 array가 사라졌기 때문에 문제가 될 수 있습니다.