malloc用法小結

2021-06-08 14:49:23 字數 2372 閱讀 1383

1.標準3部曲:malloc+ free +指標置空

2.程式設計例項

/*date:20100824

description:malloc使用規範**

in引數:申請的堆記憶體位元組數,注意int,short,float需要自己乘上相應位元組數。

out返回值:void *

*/main()

{char *str=null;

str=(char *)malloc(10); //注意malloc

在c裡,記憶體管理是通過專門的函式來實現。另外,為了相容各種程式語言,作業系統提供的介面通常是 c 語言寫成的函式宣告 (windows 本身也由c和組合語言寫成)。 1

分配記憶體 malloc函式

需要包含標頭檔案:

#include 或

#include

函式宣告(函式原型):

void *malloc(int size);

說明:malloc 向系統申請分配指定size個位元組的記憶體空間。返回型別是 void* 型別。void* 表示未確定型別的指標。c,c++規定,void* 型別可以強制轉換為任何其它型別的指標。

從函式宣告上可以看出。malloc 和 new 至少有兩個不同:new返回指定型別的指標,並且可以自動計算所需要大小。比如:

int *p;

p = new int; //返回型別為int* 型別(整數型指標),分配大小為 sizeof(int);或:

int* parr;

parr = new int [100];  //返回型別為 int* 型別(整數型指標),分配大小為 sizeof(int) * 100; 

而 malloc 則必須由我們計算要位元組數,並且在返回後強行轉換為實際型別的指標。

int* p; 

p =(int *)malloc (sizeof(int)); 

第一、malloc 函式返回的是 void *型別,如果你寫成:p = malloc (sizeof(int)); 則程式無法通過編譯,報錯:「不能將 void* 賦值給 int *型別變數」。所以必須通過(int *)來將強制轉換。 第

二、函式的實參為 sizeof(int) ,用於指明乙個整型資料需要的大小。如果你寫成:

int* p = (int *) malloc (1);

**也能通過編譯,但事實上只分配了1個位元組大小的記憶體空間,當你往裡頭存入乙個整數,就會有3個位元組無家可歸,而直接「住進鄰居家」!造成的結果是後面的記憶體中原有資料內容全部被清空。

malloc 也可以達到 new 的效果,申請出一段連續的記憶體,方法無非是指定你所需要記憶體大小。

比如想分配100個int型別的空間:

int* p = (int *) malloc ( sizeof(int) * 100 ); //分配可以放得下100個整數的記憶體空間。

另外有一點不能直接看出的區別是,malloc 只管分配記憶體,並不能對所得的記憶體進行初始化,所以得到的一片新記憶體中,其值將是隨機的。

除了分配及最後釋放的方法不一樣以外,通過malloc或new得到指標,在其它操作上保持一致。

2

釋放記憶體 free函式

需要包含標頭檔案(和 malloc 一樣):

#include 或

#include

函式宣告:

void free(void *block);

即: void free(指標變數);

之所以把形參中的指標宣告為 void* ,是因為free必須可以釋放任意型別的指標,而任意型別的指標都可以轉換為void *。

舉例:int* p = (int *) malloc(4); 

*p = 100;

free(p); //釋放 p 所指的記憶體空間

或者:int* p = (int *) malloc ( sizeof(int) * 100 ); //分配可以放得下100個整數的記憶體空間。

……free(p);

free 不管你的指標指向多大的空間,均可以正確地進行釋放,這一點釋放比 delete/delete 要方便。不過,必須注意,如果你在分配指標時,用的是new或new,那麼抱歉,當你在釋放記憶體時,你並不能圖方便而使用free來釋放。反過來,你用malloc 分配的記憶體,也不能用delete/delete 來釋放。一句話,new/delete、new/delete、malloc/free三對均需配套使用,不可混用!

int* p = new int[100];

free(p);  //error!p 是由new 所得。

malloc函式用法

void malloc int size 說明 malloc向系統申請分配size位元組的記憶體空間,返回型別為void 型別。int p p int malloc sizeof int 注意 1 因為malloc返回的是不確定型別的指標,所以返回之前必須經過型別強制轉換,否則編譯報錯,如 不能將v...

malloc函式用法

1 函式宣告 void malloc int size 說明 malloc向系統申請分配size位元組的記憶體空間,返回型別為void 型別。2 使用 int p p int malloc sizeof int 注意 1 因為malloc返回的是不確定型別的指標,所以返回之前必須經過型別強制轉換,否...

malloc函式用法

原型 extern void malloc unsigned int num bytes 用法 i nclude 或 i nclude 功能 分配長度為num bytes位元組的記憶體塊 說明 如果分配成功則返回指向被分配記憶體的指標,否則返回空指標null。當記憶體不再使用時,應使用free 函式...