int* car::func3() {
//a는 func3안에서 만들어진 지역변수인데 지역변수의 포인터를 함수밖으로 가지고 나가면
//에러가 떠야 하는데 안뜨네??..경고는 준다는데 왜 안주냐??...포인터가
int a = 20;
int* b = &a;
return b;
}
main함수에서 car객체를 생성 후 func3()를 실행해보면 return값이 20으로 잘 나온다. 연산도 가능함...why?
예제 프로그램이 매우 간단해서 20이 저장된 변수가 덮어 쓰여지지 않았기 때문입니다(환경에 따라 20이 아예 안나올 수도 있습니다. 그때 그때 달라요). 프로그램이 커지고 복잡해지면 사라진 지역 변수의 공간을 다른 값으로 덮어써버리기 때문에 값이 온전히 유지되지 않습니다.
지역변수의 참조값, 포인터를 함수 밖에서도 계속 끌고 나가야할 상황이라면 malloc이나 new를 통해 사용하면 된다!
출처
dojang.io/mod/page/view.php?id=529
'코딩 > C++,C' 카테고리의 다른 글
[C++] static변수는 s_name, 전역변수는 g_name. 변수이름 (0) | 2021.02.20 |
---|---|
[C++] 객체 생성 java와 비교 (0) | 2021.02.18 |
[C]링크, 링킹 (0) | 2021.02.09 |
[C/C++]링킹 (0) | 2021.02.09 |
[c/c++]strcpy주의점 (0) | 2021.02.09 |