傳遞動態記憶體

2022-09-16 18:00:30 字數 1299 閱讀 7840

一、記憶體分配分類

1.從靜態儲存區域分配。內存在程式編譯的時候就已經分配好,這塊內存在程式的整個執行期間都存在。例如全域性變數,static 變數。

2.在棧上建立。在執行函式時,函式內區域性變數的儲存單元都可以在棧上建立,函式執行結束時這些儲存單元自動被釋放。

3.從堆上分配,亦稱動態記憶體分配。程式在執行的時候用malloc 或new申請任意多少的記憶體,程式設計師自己負責在何時用free 或delete 釋放記憶體。動態記憶體的生存期由程式設計師決定,使用非常靈活,但問題也最多。

二、傳遞動態記憶體

1.動態指標傳遞失敗

1 #include2

using

namespace

std;

3void getme(char *p,int

num)47

intmain()

8

原因:str並沒有獲取指標p開闢的空間。本質為呼叫函式 getme 時,函式會初始化函式內的區域性變數,同時為傳進來的實參str(指標和值都建立,引用除外)建立乙個副本 _p,  _num,所以 p申請了記憶體,只是把p指向的記憶體位址改變,而str並沒有改變,所以str依然沒有獲得記憶體。同時每次p申請的記憶體都不會得到釋放,最終會造成記憶體洩露。

2.正確的傳遞動態記憶體

2.1  返回指標

1 #include2

using

namespace

std;

3char* getme(char *p,int

num)48

intmain()

9

結果:正常執行

2.2 傳遞指標

1 #include2

using

namespace

std;

3void getme(char **p,int

num)47

intmain()

8

結果:正常執行

3.引用傳遞

1 #include2

using

namespace

std;

3void getme(char* &p,int

num)47

intmain()

8

結果:正常執行

傳遞動態記憶體

當你涉及到c c 的核心程式設計的時候,你會無止境地與記憶體管理打交道.這些往往會使人受盡折磨.所以如果你想深入c c 程式設計,你必須靜下心來,好好苦一番.現在我們將討論c c 裡我認為哪一本書都沒有完全說清楚,也是涉及概念細節最多,語言中最難的技術之一的動態記憶體的傳遞.並且在軟體開發中很多專業...

傳遞動態記憶體

當你涉及到c c 的核心程式設計的時候,你會無止境地與記憶體管理打交道。這些往往會使人受盡折磨,所以如果你想深入c c 程式設計,你必須靜下心來好好苦一番。現在我們將討論c c 裡我認為哪一本書都沒有完全說清楚,也是涉及概念細節最多,語言中最難的技術之一的動態記憶體的傳遞。並且在軟體開發中很多專業人...

傳遞動態記憶體

當你涉及到c c 的核心程式設計的時候,你會無止境地與記憶體管理打交道.這些往往會使人受盡折磨.所以如果你想深入c c 程式設計,你必須靜下心來,好好苦一番.現在我們將討論c c 裡我認為哪一本書都沒有完全說清楚,也是涉及概念細節最多,語言中最難的技術之一的動態記憶體的傳遞.並且在軟體開發中很多專業...