關於局部指標的一點總結

來源:互聯網
上載者:User

標籤:指標   局部變數   



經常碰到的問題,碰到函數局部變數指標的時候會出錯。那麼C++中函數局部變數指標是如何釋放的呢?

在函數內定義的變數所佔的記憶體會在函數返回時被清空,因此若是以局部變數做返回值,會返回一個空值。

具體說一下:
當編譯器為函數調用產生代碼時,它會先將所有的參數壓棧,然後將返回地址壓入棧中,最後為局部變數在棧中開闢空間,結構如下(棧頂在上方):
               函數參數
               返回地址
               局部變數
函數返回時,棧指標會從 局部變數 處移動到 返回地址處,這時,局部變數所在的記憶體會被清空。
對於程式語言內建類型(int、float等)不會出現這種情況,它主要出現在自訂的類型或指標中。可以通過延長局部變數的生存周期或將局部變數儲存兩種方法解決。
延長局部變數生存周期:用static 或const修飾局部變數。
儲存局部變數:
int num;
Store(&num);

Store函數定義

void Store(int *p)
{
int i = 5;
*p = i;
}
這樣便將i的值儲存在了變數p中。

還可以通過使用全域變數儲存。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.