一、記憶體分配分類
1.從靜態儲存區域分配。內存在程式編譯的時候就已經分配好,這塊內存在程式的整個執行期間都存在。例如全域性變數,static 變數。
2.在棧上建立。在執行函式時,函式內區域性變數的儲存單元都可以在棧上建立,函式執行結束時這些儲存單元自動被釋放。
3.從堆上分配,亦稱動態記憶體分配。程式在執行的時候用malloc 或new申請任意多少的記憶體,程式設計師自己負責在何時用free 或delete 釋放記憶體。動態記憶體的生存期由程式設計師決定,使用非常靈活,但問題也最多。
二、傳遞動態記憶體
1.動態指標傳遞失敗
1 #include2using
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 #include2using
namespace
std;
3char* getme(char *p,int
num)48
intmain()
9
結果:正常執行
2.2 傳遞指標
1 #include2using
namespace
std;
3void getme(char **p,int
num)47
intmain()
8
結果:正常執行
3.引用傳遞
1 #include2using
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 裡我認為哪一本書都沒有完全說清楚,也是涉及概念細節最多,語言中最難的技術之一的動態記憶體的傳遞.並且在軟體開發中很多專業...