으로 지역 변수를 반환 내가 다음 코드가 : p는 동안 지역 * P는 난을, 그리고 내가 전역에 살고 있기 때문에 괜찮습니다 FUNC는 참조
int& func(int i){
int *p = &i;
return *p;
}
int& func2(int i){
vector<int> v;
v.push_back(i);
return v[0];
}
int & func3(int i){
array<int,4> arr;
arr[0] = i;
return arr[0];
}
int& func4(int i){
int j = i;
return j;
}
int main(){
cout<<func(3)<<endl;
cout<<func2(10)<<endl;
cout<<func3(100)<<endl;
cout<<func4(123)<<endl;
return 0;
}
outuput:
3
0
100
segmentation faul(core dumped)
호출 (?). func2를 호출하면 0이 반환됩니다. 어떤 것이 나에게 이해가되지 않습니다. 왜냐하면 v가 로컬 벡터이므로 세그먼트 화 오류가 발생할 것으로 예상됩니다 ... func3을 호출하면 올바른 값이 반환되고 이는 동일한 의미를 갖지 않습니다 이유. func4를 호출하면 마침내 segmentatioun 오류가 발생합니다.
누군가가 나를 어떻게 이해할 수 있습니까? 왜 벡터와 배열은 정적으로 선언 되었기 때문에 작동합니까? 사실 모든 함수가 참조를 반환한다는 것을 고려할 때 벡터와 배열은 로컬 객체이므로 세그먼트 화 오류가 예상되며 함수가 끝나면 삭제해야합니다.
매우 감사합니다.
* 표시하는 코드의 함수 중 아무 것도 * 실제로 작동하지 않습니다 (심지어 func도 아닙니다), 모두 * 정의되지 않은 동작으로 연결됩니다 *. 그리고 일단 정의되지 않은 행동을하면 * 논쟁에 실제로 사용되지 않습니다. –
저는 글로벌 범위에 살고 있습니다. (?) _ 그 아이디어를 당신에게 줬습니까? 모든 예제에서'i'는 함수에 국한된 변수입니다. –
출력이 우연히 func에 전달 된 값과 일치하기 때문에 나는 가정하고 있었다. –