動態記憶體管理

2021-09-28 23:48:57 字數 1149 閱讀 7812

malloc

void* malloc(size_t size);  向記憶體申請一塊連續可用的空間,並返回指向這塊空間的指標。
如果開闢成功,則返回乙個指向開闢好空間的指標;否則返回乙個null指標,因此malloc的返回值一定要做檢查。

calloc

void* calloc(size_t num,size_t size);
realloc
void* realloc(void* ptr,size_t size);  對動態開闢記憶體大小的調整。
①要擴充套件記憶體就直接在原有記憶體之後直接追加空間,原來空間的資料不發生變化。

②原有空間之後沒有足夠多的空間時,擴充套件的方法是:在堆空間上另找乙個合適大小的連續空間來使用。這樣函式返回的是乙個新的記憶體位址。

free

void free(void* ptr);  動態記憶體的釋放和**
ptr指向的空間不是動態開闢的,那free函式的行為是未定義的;若ptr是null指標,則函式什麼事都不做。

#include

#include

intmain()

注意

不能對null指標的解引用操作;

對動態開闢空間不能越界訪問;

對非動態開闢記憶體不能使用free釋放;

不能使用free釋放一塊動態開闢記憶體的一部分;

對同一塊動態記憶體不能多次釋放;

動態開闢記憶體一定要釋放(否則會造成記憶體洩漏)。

char

*getmemory1

(void

)void

getmemory2

(char

**p,

int num)

intmain()

return0;

}

void

getmemory3

(char

*p)int

main()

附:

typedef

struct st_type

type_a;

動態記憶體管理

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

動態 記憶體管理

定義變數時,必須制定其資料型別和名字。而動態建立物件時,只需指定其資料型別,而不必為該物件命名。取而代之的是,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...