c 用new開闢到堆區的區域性變數的指標可以返回嗎?

時間 2021-05-13 05:44:00

1樓:

可以,但是不方便。

因為這意味著釋放記憶體的責任丟給了呼叫方。每個呼叫方都得記得用完之後釋放記憶體。一旦忘記就是記憶體洩露。這可不是什麼好事。

另外,大部分常見的類似需求都已經被STL裡面的容器承包了。生產環境下面應該優先考慮他們。

2樓:阿莫小西林

首先需要明確乙個概念,區域性變數是位於棧區的,new出來的變數位於堆區,也就是說不存在位於堆區的區域性變數。

下面回答問題:可以返回,但要注意一點,堆區記憶體的需要手動釋放,否則會產生記憶體洩漏

3樓:rkko

返回的不是區域性變數的指標本身,而是指標指向的new記憶體塊的位址被返回為右值交給呼叫者使用。說白了返回指標其實就是值傳遞。也可以用右值引用&&傳遞的方式。

4樓:小莊讀書

推測題主的意思,應該是在乙個函式中定義了乙個指標(區域性變數),然後,使用new開闢了一塊記憶體空間並將這塊記憶體的位址賦值給了這個指標。

首先,這個指標是函式內部的區域性變數,占用的是棧空間,一旦函式執行結束,這個指標是會被自動釋放的。但是,使用new開闢的那部分堆空間是不會被自動釋放的。

所以,如果想要返回這個指標,不是不可以,但是一定要在呼叫這個函式的地方,定義另外乙個指標接受函式返回的那個指標。否則的話,函式退出後、內部定義的那個指標被釋放了,new出來的那塊記憶體就沒有指標指向了——記憶體洩露。

C 函式返回區域性變數的std move 問題?

BinGostar 我理解的是 避免拷貝 和move是兩個東西 避免拷貝 是編譯器的優化方式,move是告訴編譯器按照移動語義函式去執行來避免拷貝 當然大多時候,不管是否使用move,編譯器都會優化來避免拷貝clang很人性,告訴你這是不必要的,g 不管那麼多,一把梭有時候以為自己程式設計技術的突飛...

請問C 函式的區域性變數和引數哪個先被刪除?

徐聖 C param 讀讀它你就明白了 區域性變數先滾蛋,引數其實是在呼叫者的棧上呢,最後銷毀。怎麼定址到引數呢,棧幀基址往高位址加就行了。其實GCC最後一步銷毀引數一般都省略不做,因為下次使用到這塊記憶體時會覆蓋掉了。 旺旺 根據C 2003標準文件第5.2.2節第4項的規定 引數的構造與析構發生...

為什麼全域性變數和區域性變數的答案會不一樣,用C Free執行?

Xinyu Tan 我沒仔細看程式因為我覺得你的程式的行為是不可預期的。原因在於 char a 1003 沒有初始化。裡面的內容是隨機的。當你用strlen a 去計算字串 a的長度時計算結果是根據陣列a裡第乙個0值的位置決定的。由於陣列a裡的內容隨機所以 int c strlen a 中 c的值是...