堆的分配和释放

梦想的初衷 提交于 2020-01-29 23:02:13

1、分配内存

void * malloc(size_t _Size);

void * calloc(size_t _Count, size_t _Size);

malloc函数在堆中分配参数_Size指定大小的内存,单位:字节,函数返回void *指针。

calloc函数分配内存的同时把内存清空。第一个参数是所需内存单元数量,第二个参数是每个内存单元的大小(单位:字

节),calloc自动将分配的内存置0。

2、内存重新分配

void * realloc(void *p, size_t _NewSize);

第一个参数 p为之前用malloc或者calloc分配的内存地址,_NewSize为重新分配内存的大小,单位:字节。成功返回新分配

的堆内存地址,失败返回NULL。

Realloc不会自动清理增加的内存,需要手动清理,如果指定的地址后面有连续的空间,那么就会在已有地址基础上增加内

存,如果指定的地址后面没有空间,那么realloc会重新分配新的连续内存,把旧内存的值拷贝到新内存,同时释放旧内存。

如果参数p等于NULL,那么realloc与malloc功能一致。

3、内存释放

void free(void *p);

free负责在堆中释放malloc分配的内存。参数p为malloc返回的堆中的内存地址。

注:再释放完后,将指针置空。

参考:黑马程序员

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!