您的位置:首页 > 编程语言 > C语言/C++

C/C++ waring:返回局部变量或临时变量的地址

2016-09-07 12:35 323 查看
牛客题目:

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语言程序时候, 如果返回指针(变量地址),应该返回堆区或者全局区的,这样就可以避免这个”意想不到的”结果
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: