小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

malloc函數(shù)怎么使用

 啟蒙彩魂 2011-02-15
函數(shù)聲明(函數(shù)原型):

void *malloc(int size);

說(shuō)明:malloc 向系統(tǒng)申請(qǐng)分配指定size個(gè)字節(jié)的內(nèi)存空間。返回類(lèi)型是 void* 類(lèi)型。void* 表示未確定類(lèi)型的指針。C,C++規(guī)定,void* 類(lèi)型可以強(qiáng)制轉(zhuǎn)換為任何其它類(lèi)型的指針。
從函數(shù)聲明上可以看出。malloc 和 new 至少有兩個(gè)不同: new 返回指定類(lèi)型的指針,并且可以自動(dòng)計(jì)算所需要大小。比如:



int *p;
p = new int; //返回類(lèi)型為int* 類(lèi)型(整數(shù)型指針),分配大小為 sizeof(int);
或:
int* parr;
parr = new int [100]; //返回類(lèi)型為 int* 類(lèi)型(整數(shù)型指針),分配大小為 sizeof(int) * 100;

而 malloc 則必須由我們計(jì)算要字節(jié)數(shù),并且在返回后強(qiáng)行轉(zhuǎn)換為實(shí)際類(lèi)型的指針。
int* p;
p = (int *) malloc (sizeof(int));

第一、malloc 函數(shù)返回的是 void * 類(lèi)型,如果你寫(xiě)成:p = malloc (sizeof(int)); 則程序無(wú)法通過(guò)編譯,報(bào)錯(cuò):“不能將 void* 賦值給 int * 類(lèi)型變量”。所以必須通過(guò) (int *) 來(lái)將強(qiáng)制轉(zhuǎn)換。
第二、函數(shù)的實(shí)參為 sizeof(int) ,用于指明一個(gè)整型數(shù)據(jù)需要的大小。如果你寫(xiě)成:
int* p = (int *) malloc (1);
代碼也能通過(guò)編譯,但事實(shí)上只分配了1個(gè)字節(jié)大小的內(nèi)存空間,當(dāng)你往里頭存入一個(gè)整數(shù),就會(huì)有3個(gè)字節(jié)無(wú)家可歸,而直接“住進(jìn)鄰居家”!造成的結(jié)果是后面的內(nèi)存中原有數(shù)據(jù)內(nèi)容全部被清空。

malloc 也可以達(dá)到 new [] 的效果,申請(qǐng)出一段連續(xù)的內(nèi)存,方法無(wú)非是指定你所需要內(nèi)存大小。
比如想分配100個(gè)int類(lèi)型的空間:
int* p = (int *) malloc ( sizeof(int) * 100 ); //分配可以放得下100個(gè)整數(shù)的內(nèi)存空間。

另外有一點(diǎn)不能直接看出的區(qū)別是,malloc 只管分配內(nèi)存,并不能對(duì)所得的內(nèi)存進(jìn)行初始化,所以得到的一片新內(nèi)存中,其值將是隨機(jī)的。

 
除了分配及最后釋放的方法不一樣以外,通過(guò)malloc或new得到指針,在其它操作上保持一致。
 
 
free用法:
在   malloc   和   free   的面前沒(méi)有對(duì)象沒(méi)有數(shù)組,只有“內(nèi)存塊”。一次   malloc   分配的東西,一次   free   一定能回收。
 

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶(hù)發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買(mǎi)等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶(hù) 評(píng)論公約

    類(lèi)似文章 更多