前言
由于作者学习C语言时间尚短,本文不可避免地出现错误与纰漏,如果有读者发现错误请在评论区留言。
当我们创建数组时,数组的内存空间与我们想要存储的数据所需空间比较时空间可能不足,例如我们创建了一个容纳全班学生的数组,却想要统计全校学生时就会空间不足;反之,当我们创建了一个容纳全校学生的数组时,统计全班学生时就会导致空间浪费,这时我们需要了解动态内存分配的概念。
struct s
{
char name[20];
char sex[5];
int age;
};
int main()
{
struct s s[50];//50个struct s 类型的数据
//存储30个学生时 - 空间浪费
//存储60个学生时 - 空间不足
return 0;
}
一、malloc函数简介
malloc函数原型
void *malloc(size_t size)
简单来说,malloc函数就是用于申请一块指定大小的内存空间并以void*的形式返回该内存空间的地址。
示例:
#include <stdlib.h>
int main()
{
//向内存申请十个整形空间
int* p = (int*)malloc(10 * sizeof(int));
return 0;
}
1.其中 #include <stdlib.h>是malloc函数的头文件
2.由于malloc函数返回的是void*型的指针,当我们想要使用整形指针接收时必须强制转换为int*型
int main()
{
//向内存申请INT_MAX个整形空间
int* p = (int*)malloc(4*INT_MAX);
return 0;
}
3.此时动态空间分配失败,返回空指针,所以在写代码时一定不要忘记判断p指针是否为空指针
malloc函数完整实例:
int main()
{
//向内存申请十个整形空间
int* p = (int*)malloc(10 * sizeof(int));
if (p == NULL)
{
//打印错误原因
printf("%s\n", strerror(errno));
}
else
{
//使用空间
int i = 0;
for (i = 0; i < 10; i++)
{
*(p + i) = i;
}
for (i = 0; i < 10; i++)
{
printf("%d ", *(p + i));
}
return 0;
}
二、free函数
free函数原型
void free(void *ptr)
free函数的作用就是释放malloc函数给指针动态分配的内存空间。
示例:
int main()
{
//向内存申请十个整形空间
int* p = (int*)malloc(10 * sizeof(int));
free(p);
p = NULL;
return 0;
}
注意释放空间后要将p指针指向空指针,因为此时p指针仍然指向该开辟的内存空间。
总结
以上就是今天要讲的内容,本文仅仅简单了malloc函数的使用,由于作者学习C语言时间尚短,本文不可避免地出现错误与纰漏,如果有读者发现错误请在评论区留言。