C語言有關返回局部變量的問題

最近閱讀C++primer第五版P201寫道不要返回局部對象的引用或指針,藉此梳理一下返回局部變量的問題

其實,返回局部變量安全與否設涉及到內存的分配問題,一條總的原則就是函數結束後所返回的東西是否發生改變。

我們知道,一般分爲堆內存、棧內存、靜態存儲區、常熟區和代碼區(相關內存的問題請見https://blog.csdn.net/lj779323436/article/details/104676099);而函數的局部變量就是在棧中,所以函數結束,對應的棧內存也就釋放掉了,自然,如果是返回該內存裏面元素的引用或是指針,必然出錯;但如果返回的是一個值,則不受影響。總的來說就是函數不能通過返回指向棧內存的指針(返回指向堆內存的指針是可以的,因爲函數結束,並不會自動釋放堆內存),但是,有幾個小細節需要注意:如果想返回局部變量的指針或引用,則可以將局部變量聲明爲static,因爲static是存儲在靜態存儲區的,當然,你也可以返回用malloc或new從堆內存中申請的局部變量的引用或指針。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章