二、干貨分享
C語(yǔ)言當(dāng)中malloc的用法和意義
1、malloc()函數(shù)的頭文件是stdlib.h,其函數(shù)聲明如下:
void*malloc(size_t size);
其中參數(shù)size_t size表示動(dòng)態(tài)內(nèi)存分配空間的大小,以字節(jié)為單位。
size_t是typedef重定義的類(lèi)型,重定義這樣數(shù)據(jù)類(lèi)型的作用就是讓使用者一目了然,指示使用者這個(gè)參數(shù)表示一個(gè)長(zhǎng)度,在size后加上t,表示是整型相關(guān)數(shù)據(jù)類(lèi)型的,以后看到xxx_t的類(lèi)型,通常都是整型相關(guān)數(shù)據(jù)類(lèi)型重定義。
在這里malloc()函數(shù)的返回值是一個(gè)指針,或者說(shuō)是分配后內(nèi)存空間的首地址
如果malloc()函數(shù)申請(qǐng)空間成功則返回一段內(nèi)存空間的首地址,失敗則返回NULL
2、int*p;
p=malloc(sizeof(int));
在這里是不能這樣寫(xiě)的,會(huì)出現(xiàn)錯(cuò)誤:從類(lèi)型'void*'到類(lèi)型‘int’的轉(zhuǎn)換無(wú)效,應(yīng)該改為:
p=(int*)malloc(sizeof(int));
3、在使用malloc()函數(shù)申請(qǐng)的空間之前,最好用memset()函數(shù)把這段內(nèi)存空間清理一下,因?yàn)橛胢alloc()函數(shù)申請(qǐng)的空間僅僅保證的是內(nèi)存空間的大小,并不保證內(nèi)存空間是否有數(shù)據(jù)垃圾
4、當(dāng)不在使用malloc()函數(shù)申請(qǐng)的空間之后,應(yīng)該使用如下函數(shù)釋放掉這個(gè)內(nèi)存空間:
void free(void*ptr);其中void*ptr是malloc()函數(shù)的返回值,也就是內(nèi)存空間的首地址
如果只知道使用,而不知道釋放,則在7天*24小時(shí)運(yùn)行的嵌入式產(chǎn)品中,很容易會(huì)出現(xiàn)內(nèi)存泄漏,最終導(dǎo)致系統(tǒng)癱瘓。