C99 calloc、malloc和realloc区别
一、共同點
二、calloc
1、原型:
void *calloc(size_t nmemb, size_t size);2、功能描述
calloc函數(shù)申請一個元素個數(shù)為nmemb的內(nèi)存塊,每一個元素大小為size,每個元素自動初始化為0。
3、栗子:
結(jié)果如下:
查看內(nèi)存:
大家可以發(fā)現(xiàn),該地址后面10個字節(jié)均是0,而第11、12、13和14個字節(jié)均是未定義,故calloc連續(xù)分配了10個字節(jié)的內(nèi)存并自動清零。
三、malloc
1、全稱:memory allocation,中文叫動態(tài)內(nèi)存分配。
2、原型:
3、功能描述
malloc 申請指定size大小的內(nèi)存塊,其值不會初始化。
4、栗子:
結(jié)果:
查看內(nèi)存:
大家可以發(fā)現(xiàn),該地址后面40個字節(jié)均是cd,而第41、42、43個字節(jié)均是未定義,故malloc連續(xù)分配了40個字節(jié)的內(nèi)存但沒有初始化。
四、realloc
1、原型
void *realloc(void *ptr, size_t size);2、功能描述
(1)釋放原來的內(nèi)存空間,若原地址后面有足夠的內(nèi)存,則在同一地址下申請size大小的新內(nèi)存塊。若沒有,則在新的內(nèi)存地址下申請內(nèi)存。
(2)若size小于原來的內(nèi)存大小,則原數(shù)據(jù)末尾部分丟失。若size大于原來的內(nèi)存大小,則原數(shù)據(jù)完整拷貝到新的內(nèi)存塊,多出來的內(nèi)存塊不初始化。
栗子:
結(jié)果:
查看內(nèi)存:
修改代碼如下:
結(jié)果:
查看內(nèi)存:
(3)若ptr為NULL,size非零,則realloc會申請一個新的內(nèi)存塊,大小為size,等同于malloc。
栗子:
結(jié)果:
查看內(nèi)存:
(4)若ptr有值,但size為0時,則釋放內(nèi)存,返回NULL,等同于free。
栗子:
結(jié)果:
五、free
1、頭文件:stdlib.h
2、原型:
3、功能描述:
釋放malloc(或calloc、realloc)函數(shù)給指針變量分配的內(nèi)存空間。
4、使用后該指針變量一定要重新指向NULL,防止野指針出現(xiàn),有效 規(guī)避誤操作。
5、若形參為NULL,無操作。
總結(jié)
以上是生活随笔為你收集整理的C99 calloc、malloc和realloc区别的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Qt5 常见的控件类关系
- 下一篇: Win32控制台程序如何使用CStrin