memset
memset(void?p, int c, int n) 初始化申請空間 先壕,將p指向的 n字節(jié)大小的空間,全部以字節(jié)為單位初始化成c, 例如:
char *p = (char *)malloc(sizeof(char) * 100);
memset(&p, 0, sizeof(char) * 100)?//給*p指定的前100字節(jié)大小的內(nèi)存空間設置為(只支持0, -1淌喻,以字節(jié)為單位賦初始值)
malloc
void * malloc(int n)?傳入申請空間大小褥伴,單位字節(jié)蟹地,并返回該控件的內(nèi)存地址
申請一塊內(nèi)存空間挫剑,并未初始化,一般會與memset(void *p, int c, int n)結(jié)合初始化內(nèi)存空間
現(xiàn)在系統(tǒng)抹去內(nèi)存區(qū)域只是把標記除去风喇,并不會吧內(nèi)存地址清楚為0宁改,因此必須使用memset來初始化申請空間,否則申請的空間是內(nèi)存中的默認非空白空間魂莫,可能會亂碼或者與想象值不同
注意: malloc函數(shù)分配的空間也是未初始化的还蹲。
calloc
calloc()函數(shù)是malloc的簡單包裝。它的主要優(yōu)點是把動態(tài)分配的內(nèi)存清零豁鲤。
void *calloc(int n, int size)
該函數(shù)與malloc函數(shù)的一個顯著不同時是秽誊,calloc函數(shù)得到的內(nèi)存空間是經(jīng)過初始化的,其內(nèi)容全為0琳骡。calloc函數(shù)適合為數(shù)組申請空間锅论,可以將size設置為數(shù)組元素的空間長度,將n設置為數(shù)組的容量楣号。
注意:relloc函數(shù)分配的空間也是已初始化的最易。
realloc
realloc函數(shù)的功能比malloc函數(shù)和calloc函數(shù)的功能更為豐富,可以實現(xiàn)內(nèi)存分配和內(nèi)存釋放的功能炫狱,其函數(shù)聲明如下:
void * realloc(void * p, int n);
其中藻懒,指針p必須為指向堆內(nèi)存空間的指針,即由malloc函數(shù)视译、calloc函數(shù)或realloc函數(shù)分配空間的指針嬉荆。realloc函數(shù)將指針 p指向的內(nèi)存塊的大小改變?yōu)閚字節(jié)。如果n小于或等于p之前指向的空間大小酷含,那么鄙早。保持原有狀態(tài)不變。如果n大于原來p之前指向的空間大小椅亚,那么限番,系統(tǒng)將重新為p從堆上分配一塊大小為n的內(nèi)存空間,同時呀舔,將原來指向空間的內(nèi)容依次復制到新的內(nèi)存空間上弥虐,p之前指向的空間被釋放。
注意:relloc函數(shù)分配的空間也是未初始化的, 根據(jù)新指定大小與原來對比,來進行重分配霜瘪,小于地址不變珠插,大于則復制并重新分配,釋放之空間粥庄。
free
void free(void * p);?釋放p申請的空間丧失,并設置為null