在c語言中,我們有malloc。 在c++ 中,我們用new。這種分配方式更、省、內、存!
分配乙個變數。
p = new t;
在這裡,p是乙個型別為 *t 的指標,t代表乙個型別的名字。這句話的作用就是動態分配出一片大小為 sizeof ( t ) 位元組的
記憶體空間。並將該記憶體空間的起始位址賦值給p。
舉個栗子:
int *pn ;
pn = new int ;
*pn = 5 ;
分配乙個陣列。
p = new t [n] ;
(歷史總是驚人地相似) 同樣的,t為任意型別名。 p是乙個型別為t*的指標。
不同的:n是要分配的陣列元素的個數。 可以是整形表示式哦~~ 。
它的作用:動態分配出一片大小為 n * sizeof ( t ) 位元組的記憶體空間,並將該記憶體空間的起始位址賦值給p。
舉個栗子:
int *pn;
int i = 5 ;
pn = new int [ i * 20 ];
pn [0] = 20;
pn [100] = 30;//這句話的話,編譯沒問題,執行會rte *陣列越界。 因為他只申請了100個空間,在第pn[99]是最後乙個
這個動態空間先申請,然後用。但用完了之後也不能不去管它。用完後必須把它釋放掉。這時,就輪到我們的 delete 函式出場。如果不釋放,你占用的空間就一直在那裡。最要命的一點事,別的程式無法使用它。如果你一直申請下去,一直不釋放,那你就刺激了。最終有可能導致作業系統的記憶體空間不夠用。你系統就這麼炸了。
寫法:
delete +指標 // 指標必須指向動態分配的空間
具體的例子:
int *p= new int;
* p = 5;
delete p;//到此,一切正常
delete p;//注意:釋放操作只能做一次,這句話很可能導致你的程式異常。
動態記憶體分配
在c 中建立乙個物件時,我們必須要為這個物件申請一塊記憶體,而且要用建構函式對這塊記憶體進行初始化。c 中的new和delete相對於c的庫函式malloc和free在這方面有很大的優勢,所以我們主要講的是運算子new和delete。當用new來建立乙個物件時,它會自動在堆裡為物件分配記憶體並且為這...
動態記憶體分配
為什麼使用動態記憶體分配?c語言中的一切操作都是基於記憶體的 變數和陣列都是記憶體的別名,如何分配這些記憶體由編譯器在編譯期間決定 定義陣列的時候必須指定陣列唱的 而陣列長度是在編譯期就必須決定的 需求 程式執行的過程中,可能需要使用一些額外的記憶體空間 malloc和free malloc和fre...
動態記憶體分配
c的儲存類別有4種 自動的 auto 靜態的 statics 暫存器的 register 外部的 extern 全域性變數時分配在記憶體中的靜態儲存區 靜態區域性變數屬於靜態儲存類別,在靜態儲存區內分配儲存單元,是在編譯時賦初值的,只賦初值一次,在程式執行時它已有初值,以後每次呼叫函式時不再重新賦初...