1. 程式人生 > >關於返回區域性變數的指標或引用

關於返回區域性變數的指標或引用

C++ primer中說“不要返回區域性變數中的引用和指標”

但是今天一個簡單的程式跑出來結果正確,很詫異……

int *fun1()
{
	int i = 100;
	int *j = &i;
	return j;
}
int &fun2()
{
	int i = 100;
	return i;
}
int main()
{
    int *p = fun1();
cout << *p << endl;         //編譯通過,輸出結果為100
	int &m = fun2();
	cout << m<< endl;           //編譯通過,輸出結果為100
}

網上查了下原因,是因為區域性變數確實儲存在堆疊中,但是函式呼叫完成資料並沒有立即被清空,釋放變數記憶體的意思是該記憶體可以被其他物件使用。也就是說,在沒有其他資料對該記憶體進行覆蓋前,記憶體中的原資料可用。

int *fun1()
{
	int i = 100;
	int *j = &i;
	return j;
}
int &fun2()
{
	int i = 100;
	return i;
}
int main()
{
    int *p = fun1();
	cout << *p << endl;         //編譯通過,輸出結果為100
	cout << *p << endl;         //再次輸出,輸出結果不定
	int &m = fun2();
	cout << m<< endl;           //編譯通過,輸出結果為100
	cout << m<< endl;           //再次輸出,輸出結果不定
}