當函式返回乙個區域性變數的指標問題,記憶體是否被釋放

2022-08-23 23:21:13 字數 616 閱讀 2084

在學習c/c++的時候,我遇到了乙個讓我思考良久的問題,當乙個自定義函式返回乙個區域性變數的指標時是否是個野指標呢?對此,我講一下我的理解。

按照正常的理解,當乙個函式執行完畢後會使其記憶體釋放,這就產生了乙個問題。當乙個函式裡面有乙個區域性變數時,使乙個指標指向這個變數的空間,最後這個空間被釋放,然後指標

變為野指標,即這種理解:(注:這是錯誤理解)

首先

然後記憶體釋放

如果按照這樣的邏輯,p定是個亂碼

但是vs2019執行如下:

其實真實原因是,我們理解的記憶體釋放,並不是真正意義上的記憶體釋放,而是表示這個空間可以被其他記憶體使用,而其值仍存在,並不是記憶體裡的東西直接就沒了,

但返回乙個類似的指標是乙個大忌,這種程式小,可能沒有問題,但是在某些大專案中,若這樣寫就可能使資料記憶體出現問題。

返回乙個區域性變數的指標造成的錯誤

include char p fun char p a return p int main int argc,const char argv int main int argc,const char argv 這樣也是不可以的,因為設a的位址是0x0001,可以找到0x0001,但是0x0001中的...

函式區域性變數的返回

昨天看到一道程式設計糾錯題,在網上看到乙個講解非常詳細的文章,這裡拿來和大家分享一下 一般的來說,函式是可以返回區域性變數的。區域性變數的作用域只在函式內部,在函式返回後,區域性變數的記憶體已經釋放了。因此,如果函式返回的是區域性變數的值,不涉及位址,程式不會出錯。但是如果返回的是區域性變數的位址 ...

C 函式返回區域性變數指標的問題

講這個問題之前要先簡單講一下c 的記憶體管理。更詳細的內容可以參考這篇文章 c 記憶體管理 c 程式的記憶體被分為堆 heap 棧 stack 全域性 靜態儲存區,自由儲存區和常量儲存區。1 堆 heap new的都存放在這裡,屬於動態分配,如果在程式中呼叫delete釋放掉,那麼將一直存在,直到程...