가능한 중복 :
Can a local variable's memory be accessed outside its scope?로컬 변수의 어드레스 동작을 반환
입력 :
#include <stdlib.h>
#include <stdio.h>
int func2(void);
int* func1(void);
int func2(void)
{
int* b;
b = func1();
printf("%d", *b);
printf("%d", *b);
printf("%d", *b);
}
int* func1()
{
int a = 13;
return &a;
}
int main()
{
func2();
}
출력 :
13 -1077824828 -1077824828
,617,
누군가 스택과 OS에서 어떤 일이 일어 났는지 설명 할 수 있습니까? 왜 포인터의 값을 얻은 후에 결과가 13에서 가비지로 바뀌 었습니까?
중복 숫자 무한대에 1을 더한 값입니다. 이것은 정의되지 않은 동작입니다. –
또한,'func2'는 리턴 타입'int'으로 정의되었지만 아무것도 리턴하지 않습니다. –
실제로 질문에 답하기 위해서 : 특별한 경우에,'printf()'의 첫 번째 호출은'func1()'에 대한 호출에서 스택에 남은'13'을 덮어 씁니다. – Mysticial