2012-05-18 2 views
-3

가능한 중복 : 당신이 심판을 반환 할 때
Returning the address of local or temporary variable
Can a local variable's memory be accessed outside its scope?
return reference to local variableref를 반환하면 정의되지 않은 동작입니까? 지역 변수에?

은 정의되지 않은 동작이 그것입니다. 지역 변수에?

http://ideone.com/Kz381

int & func(){ 

     int x = 10; 
     return x; 

} 

int main() { 

     int &y = func(); 
     cout << y << endl; 

} 
+1

나는 "지역 변수는"사양에서 특별한 의미가 있는지 모르겠지만, 나는 그것이 정적 저장 기간없이 지역 변수에 대한 정의되지 않은 동작이 될 것 상상한다. –

답변

7

예 그렇습니다. 함수가 끝나면 변수를 더 이상 사용할 수 없습니다.

당신은 일을 나타납니다 운입니다. 문제는 메모리가 지워지지 않으므로 10이 아직 있지만 언제든지 다시 사용할 수 있으므로 안전하지 않습니다.

+0

"정의되지 않은 동작"의 바로 정의. –

+0

당신은 그것이 ub다는 것을 의미합니까! y는 항상 같은 결과를 출력하지 않습니다. 로컬 변수는 func 끝 뒤 할당이 해제됩니다! – faressoft

+0

예, ub입니다. 네, 항상 같은 결과를 출력하지는 않습니다. 지역 변수는 함수가 종료 된 후에 범위를 벗어날 것이므로 모든 종류의 쓰레기로 다시 작성할 수 있습니다. – Martol1ni

5

기술을 얻으려면 반환하는 것이 정의되지 않은 동작이 아닙니다. 을 사용할 경우을 사용하면 정의되지 않은 동작 만 반환됩니다.