- 时间:2022-05-30 18:15 编辑: 来源: 阅读:
- 扫一扫,手机访问
摘要:C语言中堆空间的生成与释放详解
[b]堆空间的分配和释放
[/b] #include <stdlib.h>
malloc、calloc、realloc、free
malloc
void *malloc(size_t size);
功能:在堆中分配 size 字节的连续空间
参数:size_字节数
返回值:成功返回分配空间的首地址,失败返回 NULL
[b]free
[/b] void free(void *ptr);
功能:释放由 malloc、calloc、realloc 分配的空间
参数:ptr_空间的首地址
返回值:无
[b]注意:
[/b] 1、每个空间只能释放一次
2、ptr 必须是分配空间的首地址
[b]calloc
[/b] void *calloc(size_t nmemb, size_t size);
功能:在堆中分配 nmemb 块大小为 size 字节的连续空间
参数:nmemb_数据块数 size_每块大小
返回值:成功返回分配空间的首地址,失败返回 NULL
[b]注意:[/b]calloc 会把空间内容置 0,而 malloc 不会
[b]realloc
[/b] void *realloc(void *ptr, size_t size);
功能:在 malloc、calloc、realloc 分配的 ptr 开始空间,重新分配为 size 字节大小
参数:ptr_malloc、calloc、realloc 分配空间首地址 size_总大小
返回值:成功返回分配空间的首地址 失败返回 NULL
[b]注意:
[/b] 1、如果 size 小于原空间大小,不会起作用
2、新增加的空间不会置 0
3、如果 ptr 为 NULL,相当于 malloc(size)
4、如果 ptr 不为 NULL 并且 size == 0,相当于 free(ptr)
5、ptr 不需要释放,如果分配成功,只释放重新分配空间的首地址