动态内存的申请和释放
malloc函数:
在C语言中,使用malloc函数来申请内存,函数原型如下:
malloc :
#include <stdlib.h>
void *malloc(size_t size);
说明:
* 在堆中占用size个字节空间,返回该空间的地址
* 该空间没有被初始化
* 如果size为0,返回NULL或者可以被free的唯一地址值
返回值:
成功: 返回地址值
失败: 返回NULL ,并设置 errno
size为0 有可能返回 NULL
calloc函数:
calloc 是一个用于分配内存空间并初始化为零的标准库函数,位于 <stdlib.h> 头文件中。它与 malloc 函数类似,但有一个额外的步骤:calloc 分配的内存会被初始化为零,而 malloc 分配的内存中的内容是未定义的(可能是随机值)。
#include <stdlib.h>
void *calloc(size_t nmemb, size_t size);
*说明:
* 在堆中开辟 nmemb 个元素,每一个元素都是 size 字节,返回该空间的地址值
* 该空间 清零
* 如果 nmemb 或者 size 为0,返回NULL或者可以被free的唯一地址值
*形参:
nmemb : 元素个数
size :每个元素的大小
*返回值:
成功: 返回地址值
失败: 返回NULL ,并设置 errno
如果 nmemb 或者 size 为0 有可能返回 NULL
realloc函数:
realloc 是一个用于重新分配内存空间的标准库函数,位于 <stdlib.h> 头文件中。使用 realloc,可以更改先前分配的内存块的大小,扩大或缩小内存块,并且可以选择保留或丢弃先前内存块中的内容。
#include <stdlib.h>
void *realloc(void *ptr, size_t size);
*说明:
* 将 ptr 里面的字节数 改变为 size (扩容 或者 缩容)
* 原剩下的数据保持不变
* 扩容的空间没有做初始化
* 如果 ptr 是 NULL ,相当于 malloc(size)
* 如果 size 为 0 ,相当于 free
* 如果有足够空间扩容,则返回源地址
* 如果没有足够空间扩容,找到新的地方,返回新的地址,将原老地方数据拷贝过来,释放原地址空间
*形参:
ptr :原空间,一定是在堆中,由 malloc calloc realloc 占用的空间
size :新的空间大小
*返回值:
成功 : 返回旧地址 或者 新地址
失败 : 返回NULL , 并设置 errno
free使用函数
free 是一个用于释放先前通过 malloc、calloc 或 realloc 函数分配的内存空间的标准库函数,位于 <stdlib.h> 头文件中。使用 free 函数可以将不再需要的内存返回给系统,以供其他部分使用。
#include <stdlib.h>
void free(void *ptr);
*说明:
* 释放空间
*形参:
ptr : 由 malloc calloc realloc 占用的空间