C/C++ waring:返回局部变量或临时变量的地址
2016-09-07 12:35
387 查看
牛客题目:
string& test_str()
{
string str = "test";
return str;
}
int main()
{
string& str_ref = test_str();
cout << str_ref << endl;
return 0;
}
A.编译警告
B.返回局部变量的引用,运行时出现未知错误
C.正常编译且运行
D.把代码里的&都去掉之后,程序可以正常运行
答案:A B D
分析:在C语言中,局部变量是分配在栈空间上的, 当函数调用结束后,由编译器释放.
通过调用test_str得到了他的局部变量的内存地址, 然而在main函数中调用函数时,这个内存地址被”破坏”了, 所以出现了这个意想不到的结果.
所以我们在书写C语言程序时候, 如果返回指针(变量地址),应该返回堆区或者全局区的,这样就可以避免这个”意想不到的”结果
string& test_str()
{
string str = "test";
return str;
}
int main()
{
string& str_ref = test_str();
cout << str_ref << endl;
return 0;
}
A.编译警告
B.返回局部变量的引用,运行时出现未知错误
C.正常编译且运行
D.把代码里的&都去掉之后,程序可以正常运行
答案:A B D
分析:在C语言中,局部变量是分配在栈空间上的, 当函数调用结束后,由编译器释放.
通过调用test_str得到了他的局部变量的内存地址, 然而在main函数中调用函数时,这个内存地址被”破坏”了, 所以出现了这个意想不到的结果.
所以我们在书写C语言程序时候, 如果返回指针(变量地址),应该返回堆区或者全局区的,这样就可以避免这个”意想不到的”结果
相关文章推荐
- 返回局部变量或临时变量的地址的问题
- C语言中返回局部变量或临时变量的地址的错误
- C++ 返回自动变量的地址的误区
- C++值传递时返回临时变量,引用传参
- [c/c++]临时变量、局部变量,return的效率
- C++中返回临时变量指针问题
- C++函数返回临时变量的引用运行要出错
- 编译器警告(级别1) C4172 返回局部变量或临时对象的地址
- 如果从函数中返回局部变量的地址,引用或者指针的形式,则变量类型必须是静态的或者常量,即不在栈中存储
- c++返回临时变量的疑惑 返回常量c风格字符串
- 临时变量问题 C++问题
- 全局变量和局部变量取地址
- 不要返回c++临时对象的指针
- C/C++——全局变量、局部变量、静态全局变量和静态局部变量
- C|C++中的静态全局变量,静态局部变量,全局变量,局部变量的区别
- C/C++中关于地址、指针和引用变量的学习笔记(四) : 函数
- 函数不能返回临时变量,可以采用输出参数形式
- 温习:C|C++中的静态全局变量,静态局部变量,全局变量,局部变量的区别
- C/C++中关于地址、指针和引用变量的学习笔记(二) : 数组
- c++中临时变量不能作为非const的引用参数