2 lansexinchen lansexinchen 于 2014.09.10 12:58 提问

看到一道题说以下s的引用非法,但在vs2012上试验后却可以准确运行,求解释

#include
#include
#include

using namespace std;

string foo()
{
//string t = "asfds";
return "asfds";
//return t;
}

void bar(string &s)
{
cout << s << endl;
}

int main()
{
bar(foo());
system("pause");
return 0;
}

为什么可以运行,foo函数返回的临时变量不是会被释放掉的吗,bar函数的参数s是哪个变量的引用

1个回答

Jiazhou_Lvguan
Jiazhou_Lvguan   2014.09.11 16:15

"asfds"存放在只读常量区,而不是栈区,所以返回后,此内存还没有释放,如果改成char buff[]= "zaizhanqu",然后返回,因为buff在栈区,值会被回收,而buff只是一个符号地址,没有内存空间,所以会存在潜在的危险。

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!