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 函式...