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