malloc使用方法


malloc使用方法

須要包括頭文件:

#include 'stdlib.h'

函數聲明(函數原型)

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 [] 的效果。申請出一段連續的內存,方法無非是指定你所須要內存大小。

比方想分配100int類型的空間:

int* p = (int *) malloc ( sizeof(int) * 100 ); //分配能夠放得下100個整數的內存空間。

 

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

除了分配及最后釋放的方法不一樣以外,通過mallocnew得到指針。在其他操作上保持一致。

free使用方法

須要包括頭文件( malloc 一樣)

#include 'stdlib.h'

函數聲明:

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 [] 要方便。

只是。必須注意。假設你在分配指針時。用的是newnew[],那么抱歉,當你在釋放內存時,你並不能圖方便而使用free來釋放。反過來。你用malloc 分配的內存,也不能用delete/delete[] 來釋放。一句話,new/deletenew[]/delete[]malloc/free 三對均需配套使用。不可混用。

int* p = new int[100];

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

 

函數malloc()calloc()都能夠用來動態分配內存空間,但兩者稍有差別。

malloc()
數有一個參數,即要分配的內存空間的大小
:
void *malloc(size_t size);

calloc()
函數有兩個參數,分別為元素的數目和每一個元素的大小,這兩個參數的乘積就是要分配的內存空間的大小。

void *calloc(size_t numElements,size_t sizeOfElement);

假設調用成功,函數malloc()和函數calloc()都將返回所分配的內存空間的首地址。


函數malloc()和函數calloc()的主要差別是前者不能初始化所分配的內存空間,而后者能。假設由malloc()函數分配的內存空間原來沒有被使用過。則當中的每一位可能都是0;反之,假設這部分內存以前被分配過,則當中可能遺留有各種各樣的數據。也就是說,使用malloc()函數的程序開始時(內存空間還沒有被又一次分配)能正常進行,但經過一段時間(內存空間還已經被又一次分配)可能會出現故障。



函數calloc()會將所分配的內存空間中的每一位都初始化為零,也就是說,假設你是為字符類型或整數類型的元素分配內存,那麽這些元素將保證會被初始化為0;假設你是為指針類型的元素分配內存,那麽這些元素一般會被初始化為空指針;假設你為實型數據分配內存,則這些元素會被初始化為浮點型的零。




須要包括頭文件:

i nclude <mallco.h>

i nclude <stdlib.h>

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM