const int* Func()
{
int local_value = 100;
return &local_value;
}
int main()
{
const int* value = Func();
printf("%d", *value);
return 0;
}
printf의 값은?
이 코드에서 생길 수 있는 문제점은 무엇인가?
const int* Func()
{
int local_value = 100;
return &local_value;
}
int main()
{
const int* value = Func();
printf("%d", *value);
return 0;
}
printf의 값은?
이 코드에서 생길 수 있는 문제점은 무엇인가?
수명이 끝난 객체를 참조함 ㅇㅅㅇ
printf의 값은? 다른거 없이 이 코드만 있음.
그러면 아마 100 나오지 않을까 싶은데 확신이 안서노...
ㅇㅇ 100이 나옴. 0이나 쓰레기값이 나올거라 생각하는 사람들이 있어 ㅋㅋ
const면 정적영역에 들어갈텐데 저게 맨처음에 들어가나? - dc Cpp
아 출력에 *있노 - dc Cpp
컴파일러에 따라 다를듯
100이겠지. 문제점은 보장된 배열을 참조하는 것이 아니라서 꼭 100으로 나온다는 보장이 없음
배열 -> 포인터
굿
100이 바뀔수도 있다는 문제가 잇냐??
글쎄... 나는 거의 없다고 보는데, 함수가 끝나서 밀려버린 스택에서 값을 가져오는거라 위험하다는 문제점이 있긴 하지
궁금한거 있는데 func함수에 있는 local value는 함수가 끝나면 없어질텐데 왜 100이 나와?
ㅇㅇ 그거에 대한걸 물어보는 문제야.
설명좀..
콜스택에 쌓였다가 내려도 스택 가리키는 포인터만 내리지 내용을 지우지 않거든 - dc Cpp
함수가 끝나면 값이 완전히 사라지거나 초기화가 된다고 생각할텐데, 사실은 stack을 다시 다시 올리는것 뿐이라서 100이 나오는 것.
다른내용으로 덮어쓰기전에 참조하면 그대로 보존돼있고, 언제 덮어쓸 지 모른다는 점에서 UB임 - dc Cpp
ㅋㅋ 실제로 빌드하려고 하면 워닝이 뜸. 좀 억지문제이긴 해
이런걸 몰랐네 ㅅㅂ 스택 다시 공부하러간다 ㄱㅅ
쓸 지->쓸지
const int가 머임? 허수라서머음 - dc App
게이야...