動態記憶體管理總結

2021-10-07 11:35:15 字數 1116 閱讀 4109

//動態記憶體空間是在堆上開闢的,而我們以前所知道的是在棧上開闢的。

//什麼時候使用堆空間? 空間大小在程式執行的時候才能知道,那陣列的編譯時開闢空間的方式就不能滿足了。這時候就只能試試動態存開闢了

//動態記憶體開闢函式

void

*malloc

(size_t size)

列子:#include

intmain()

;//**2

int* ptr =

null

; ptr =

(int*)

malloc

(num*

sizeof

(int))

;//申請開闢的動態空間if(

null

!= ptr)

//判斷ptr指標是否為空

}free

(ptr)

; ptr =

null

;return0;

}//mallcoc函式使用時要注意判定指標所指向位置是否合法,因為申請空間可能失敗。空間用完後要進行free釋放空間。因為在堆上開闢的空間要手動進行記憶體釋放,否則可能會造成記憶體洩露。而在棧上開闢的空間,系統會自動進行空間釋放。

///free函式用來釋放動態開闢的記憶體。如果引數ptr指向的空間不是動態開闢的,那free函式的行為是未定義的。如果引數ptr是null指標,則函式什麼事都不做。malloc和free都宣告在stdlib.h標頭檔案中。

void

*calloc

(size_t num,size_t size)

calloc函式也是動態記憶體申請空間的函式,與malloc區別是calloc函式會對申請完空間進行初始化為0.

void

*realloc

(void

* ptr,size_t size)

realloc函式是對空間進行調整的,如果發現申請空間較大則realloc函式的功能就是縮小這個空間,如果發現空間不夠則就會擴大空間。縮小空間和擴大空間都有兩種方式:1在原有空間進行擴大或縮小。2重新開闢空間是指標指向新開闢空間的首位址。

動態記憶體管理

首先應該明白物件的三種內部的儲存方式 自動儲存,靜態儲存,和動態儲存。當執行離開當期程式塊的時候,堆疊指標返回到它進入程式塊 之前的地方,有效的銷毀了那個程式塊的自動變數。重新進入這個塊會再次建立所有的自動變數。靜態物件宣告或者在檔案域中。動態物件是存在系統呼叫 的在執行期中建立並且儲存在堆中,這是...

動態 記憶體管理

定義變數時,必須制定其資料型別和名字。而動態建立物件時,只需指定其資料型別,而不必為該物件命名。取而代之的是,new表示式返回指向新建立物件的指標,我們通過該指標來訪問此物件。int i int pi new int 這個new表示式在自由儲存區中分配建立了乙個整型物件,並返回此物件的位址,並用該位...

動態記憶體管理

c語言使用malloc calloc realloc free進行動態記憶體管理。void test c 通過new和delete動態管理記憶體。new delete動態管理物件。new delete動態管理物件陣列。void test void test int globalvar 1 stati...