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