#include?<iostream>
#include?<string>
using?namespace?std;
const?string?&?version3(string?&?s1,?const?string?&?s2);?//?bad?design
int?main()
{
?string?input;
?string?copy;
?string?result;
?cout?<<?"Enter?a?string:?";
?getline(cin,?input);
?copy?=?input;
?cout?<<?"Your?string?as?entered:?"?<<?input?<<?endl;
result?=?version3(input,?"@@@");
?cout?<<?"Your?string?enhanced:?"?<<?result?<<?endl;
?cout?<<?"Your?original?string:?"?<<?input?<<?endl;
?return?0;
const?string?&?version3(string?&?s1,?const?string?&?s2)?//?bad?design
{
?string?temp;
?temp?=?s2?+?s1?+?s2;
?//?unsafe?to?return?reference?to?local?variable
?return?temp;
}
答案時程序試圖引用已釋放的內(nèi)存??但是沒看到啊,難以理解
1 回答
已采納

onemoo
TA貢獻883條經(jīng)驗 獲得超454個贊
main 函數(shù)缺了尾大括號,不過應(yīng)該是貼代碼時落下了吧。
在 version3 中,你返回的是函數(shù)中的變量 temp。這個 temp 的作用域僅在函數(shù)之中,在函數(shù)運行結(jié)束后 temp 會被銷毀,這樣返回的這個引用就引用無效對象了。
在函數(shù)返回引用時一定要注意不要返回函數(shù)的 local 變量。
- 1 回答
- 0 關(guān)注
- 1400 瀏覽
添加回答
舉報
0/150
提交
取消