2017-10-28 1 views
-3

로컬 변수에 저장된 값을 main() 함수에 반환하려고합니다. 지역 변수의 포인터를 main() 함수에 반환

#include<stdio.h> 
int *func(); 
int main() 
{ 
    int *ptr; 
    ptr = func(); 
    printf("%d", *ptr); 
    printf("%d", *ptr); 
    return 0; 
} 

int *func() 
{ 
    int x = 5, *p; 
    p = &x; 
    return p; 
} 

제의 printf() 문

출력 = 5를 제공하지만, 두 번째의 printf() 문 출력으로 쓰레기 값을 제공한다.

"func()"함수가 종료 된 후 로컬 변수 'x'가 존재하지 않는다는 것을 알고 있습니다. 그렇다면 첫 번째 printf() 문에 대해 5를 왜 인쇄합니까 ?? 코드 내부에서 어떤 일이 발생했는지 알려주십시오.

+0

스페이스 바에 문제가 있습니까? 코드의 들여 쓰기가 좋을 것입니다. –

답변

3

func이 호출되면 로컬 변수 xp에 대한 스택이 만들어집니다. 그러나 반환 할 때이 스택이 소멸됩니다. 따라서 p은 이미 손상된 값을 가리키므로 해당 동작은 정의되지 않습니다.

관련 문제