動態分配記憶體

2021-07-01 18:13:22 字數 1070 閱讀 1169

動態記憶體分配即分配記憶體大小在執行時才確定,一般在堆中分配。c語言動態記憶體分配相關的函式。

#include

void * malloc (size_t size);

malloc的使用比較直接,乙個成功的malloc呼叫返回分配的size大小的記憶體的指標。失敗時返回null並將錯誤**置為enomem。

教材中經常出現的用法是將malloc返回的void指標進行強制記憶體轉換然後賦給記憶體指標,其實是不必要的,在賦值時c語言是可以將void型別指標自動轉換成對應的指標的。

#include

void * calloc (size_t nr, size_t size);

calloc可以分配nr個size大小的記憶體空間,一般用於一組struct結構體的分配。

那麼calloc和malloc有什麼區別呢?拋開nr引數不談(malloc也可以將引數設定為nr*size達到一樣的效果),最關鍵的區別是malloc分配的記憶體是不保證初始化的,而calloc會將分配的記憶體都初始化為0.

#include

void * realloc (void *ptr, size_t size);

realloc函式將ptr指向的記憶體空間重新分配大小為size並返回新的記憶體首位址。具體的實現,函式首先會嘗試直接在已經分配的記憶體後進行padding,如果空間足夠那麼還是返回原來的位址,如果不夠,則會尋找新的空間並malloc size個位元組,之後再將原先的內容「搬家」到新的記憶體位址,所以函式的返回值可能和原指標相同,也可能不同。

另外,size引數如果是0,則該函式和free效果相同。如果ptr是null,函式的效果和malloc相同~

#include

void free (void *ptr);

釋放前三個函式申請的記憶體空間。關於free最經典的問題就是記憶體洩露(memory leak)。所以,使用前三個分配函式分配的記憶體一定要記得free掉。

記憶體動態分配

陣列的元素儲存於記憶體中連續的位置上。當乙個陣列被宣告時,它所需要的內存在編譯時就被分配。但是,你也可以使用動態記憶體分配在執行時為它分配記憶體。malloc所分配的是一塊連續的記憶體。例如,如果請求它分配100個位元組的記憶體,那麼它實際分配的記憶體就是100個連續的位元組,並不會分開位於兩塊或多...

動態分配記憶體

動態分配記憶體 動態分配記憶體也可以分配儲存區,這種方式可以在程式執行的時候臨時決定分配的儲存區大小 為了管理動態分配的記憶體,就需要使用一組標準函式 為了使用這些標準函式,需要包含stdlib.h標頭檔案 malloc 函式可以動態分配一組連續的位元組 這個函式需要乙個整數型別引數表示分配的位元組...

動態分配記憶體

1 動態分配 new type 動態分配陣列 new type 釋放空間 delete expr 指標 釋放空間陣列 delete expr 2 new返回的是動態開的記憶體的首位址 如果沒有足夠的記憶體空間,其結果為乙個0值指標 int p new int 12 銷毀物件後,指標沒有定義,但是還指...