Possible Duplicate:
Returning reference to a local variable
I happened to find this code return 5. It's OK to write it this way or should definitely be avoid?
int& f() {
int i = 5;
return i;
}
int main(){
cout<<f()<<endl;
}
Possible Duplicate:
Returning reference to a local variable
I happened to find this code return 5. It's OK to write it this way or should definitely be avoid?
int& f() {
int i = 5;
return i;
}
int main(){
cout<<f()<<endl;
}
If it works, it works only by accident. This is undefined behavior and should definitely be avoided.
The moment that f returns, there are no longer any guarantees as to what happens to the memory where i lived and what happens when you try to access it.
The compiler warning is correct — you can't do that. i is likely to be overwritten at some unexpected time.
Either do
int f() { // don't return reference
int i = 5;
return i;
}
int main(){
cout<<f()<<endl;
}
or
int &f( int &i ) { // accept reference
// actually, in the case of modify-and-return like this,
// you should call by value and return by value without
// using any references. This is for illustration.
i = 5;
return i;
}
int main(){
int i
cout<<f(i)<<endl;
}
When the function 'f()' returns, the stack contents will be popped, and the memory address to the variable 'i' will no longer be valid. This code should not be used.