Logo

郎哥编程

第48讲:内存分配函数

2026-04-14 23

编程时,如果您预先知道数组的大小,那么定义数组时就比较容易。例如,一个存储人名的字符数组,它最多容纳 100 个字符,所以您可以定义数组,如下所示:

char name[100];

但是,如果您预先不知道需要存储的文本长度,就很难预定义字符数组的大小,若数组长度小于存储的文本长度,就会导致内存溢出。若数组长度远大于存储的文本长度,就会导致内存浪费。最好的方式就是根据存储的文本长度,动态分配数组的长度,而不是静态定义数组的长度,这就是C语言的动态内存管理。

C 语言为内存的分配和管理提供了几个函数。这些函数可以在 <stdlib.h> 头文件中找到。

函数声明

void *calloc(int num, int size);

在内存中动态地分配 num 个长度为 size 的连续空间,并将每一个字节都初始化为 0。所以它的结果是分配了 num*size 个字节长度的内存空间,并且每个字节的值都是0。函数返回分配的内存块指针,该指针的类型始终为void*,可以将其转换为所需的数据指针类型。若分配失败,函数返回空指针,即指针为0。

函数声明

void free(void *address);

该函数用于释放 address 所指向的内存空间,该内存空间由内存分配函数分配。

函数声明

void *malloc(int num);

在内存中动态分配一块指定大小的内存空间,用来存放数据。这块内存空间在函数执行完成后不会被初始化,它们的值是未知的。函数返回分配的内存块指针,该指针的类型始终为void*,可以将其转换为所需的数据指针类型。若分配失败,函数返回空指针,即指针为0。

函数声明

void *realloc(void *address, int newsize);

该函数重新分配address指向的内存空间,把内存空间扩展到 newsize。函数返回指向重新分配的内存块的指针,它可以与ptr相同,也可以是新位置。若分配失败,函数返回空指针,即指针为0。

代码在线纠错(通义千问 qwen-max)

支持粘贴多个代码文件,提交后由阿里云通义千问自动分析代码漏洞、语法错误、逻辑问题并给出修改建议。
您已解锁 AI 代码纠错功能,可正常使用!

评论区

登录 后发表评论
暂无评论