關於局部指針的一點總結
阿新 • • 發佈:2017-07-22
地址 ng- -a 全局 ack 一點 詳細 所在 trac
常常碰到的問題,碰到函數局部變量指針的時候會出錯。那麽C++中函數局部變量指針是怎樣釋放的呢?
在函數內定義的變量所占的內存會在函數返回時被清空,因此若是以局部變量做返回值,會返回一個空值。
詳細說一下:
當編譯器為函數調用產生代碼時,它會先將全部的參數壓棧。然後將返回地址壓入棧中,最後為局部變量在棧中開辟空間,結構例如以下(棧頂在上方):
函數參數
返回地址
局部變量
函數返回時,棧指針會從 局部變量 處移動到 返回地址處,這時,局部變量所在的內存會被清空。
對於程序語言內置類型(int、float等)不會出現這樣的情況 ,它主要出如今自己定義的類型或指針中。
能夠通過延長局部變量的生存周期或將局部變量保存兩種方法解決。
延長局部變量生存周期:用static 或const修飾局部變量。
保存局部變量:
int num;
Store(&num);
Store函數定義
void Store(int *p)
{
int i = 5;
*p = i;
}
這樣便將i的值保存在了變量p中。
還能夠通過使用全局變量保存。
關於局部指針的一點總結