怎么做物流网站代理,seo网络培训机构,食品网站建设优化案例,ui培训机构设计前言#xff1a;Hello大家好#x1f618;#xff0c;我是心跳sy#xff0c;今天为大家带来malloc函数与free函数的用法#xff0c;我们一起来看看吧#xff01; 目录
一、malloc函数 #x1f4ab;
1、⭐️malloc函数对应的头文件⭐️
2、⭐️malloc函数的作用⭐️
3… 前言Hello大家好我是心跳sy今天为大家带来malloc函数与free函数的用法我们一起来看看吧 目录
一、malloc函数
1、⭐️malloc函数对应的头文件⭐️
2、⭐️malloc函数的作用⭐️
3、⭐️malloc函数的参数与使用⭐️
二、free函数
1、⭐️free函数对应的头文件⭐️
2、⭐️free函数的作用⭐️
3、⭐️free函数的参数及使用⭐️ ⭐️场景设想我们在编写代码时经常会遇到这样一种情况我们无法预知确定某些数据结构的大小比如将一串整数输入到一个数组之中我们无法得知将要输入多少个整数比如需要输入n个数据数组的大小只能在程序运行过程时才能确定怎么办呢❓
这时就需要调用malloc函数为这个数组分配动态的内存空间这部分空间来自进程地址中的堆段用完之后需要调用free释放。
我们看一个小例子
#includestdlib.h
#includestdio.h
//动态分配内存并读取用户输入的整数
int main()
{int* array, i, n;scanf(%d, n);array (int*)malloc(sizeof(int) * n);for (i 0; i n; i){scanf(%d, array[i]);}free(array);return 0;
}
解释这段代码控制输入 n 个整数根据要输入的个数来动态分配内存使用 malloc() 函数动态分配了一个包含 n 个整数的数组返回值是一个指向整数的指针 (int*)将其赋值给 array ;for 循环用于遍历数组 array从标准输入中读取 n 个整数,将其存储到数组 array 的第 i个元素中最后使用 free()函数释放动态分配的内存避免内存泄漏。
一、malloc函数 1、⭐️malloc函数对应的头文件⭐️
malloc函数对应的头文件是stdlib.h许多的c编译器也支持使用malloc.h两种都可以使用但为了确保代码的可移植性和兼容性我们还是推荐使用stdlib.h
2、⭐️malloc函数的作用⭐️
可动态申请一段空间 分配一块大小为 size 字节的内存块并返回该块的起始地址的指针。
3、⭐️malloc函数的参数与使用⭐️
在上图中我们可以看到malloc函数的原型为 void* malloc (size_t size)首地址返回void*我们可以将其转换成任意类型去使用比如我们代码中返回了int*函数参数为要申请的字节数比如
int* p (int*)malloc(sizeof(int) * 4);
⭕️int类型是4字节代码意为申请4个int类型的空间共分配4*416字节
⚠️注意malloc函数分配的是一段连续的空间所以呢我们可以把这个一维空间当成数组去使用例如我们上面给出的代码所示。
⭕️在实际编写代码中我们在分配好地址后常常需要验证地址空间是否分配好了需要判断一下
int* p (int*)malloc(sizeof(int) * 10);
if (p NULL)
{printf(动态内存分配失败);return 0;
}二、free函数 1、⭐️free函数对应的头文件⭐️
仍然是 stdlib.h与malloc函数一致。
2、⭐️free函数的作用⭐️
释放内存块通过调用 malloc、calloc 或 realloc 分配的内存块释放使其可以再次用于其他分配。
3、⭐️free函数的参数及使用⭐️
参数是void*类型的指针也就是我们上方malloc申请的那块空间的首地址传进去就可以进行释放了如下 free(p);
⚠️注意free函数用于释放我们的三兄弟函数malloc、calloc 或 realloc 它们之间成对出现如一个malloc下面必须有一个对应的free✔
如果 ptr 指针不是用上述三兄弟函数分配的内存块则会导致未定义的行为
如果 ptr 是一个空指针则函数不执行任何操作
释放完空间之后空间释放掉了但是地址值还在p里保存着我们通常置指针为空防止野指针的产生即
free(p);
p NULL;
关于calloc函数和realloc函数的知识我们在下期文章为大家带来感谢大家花费宝贵的时间阅读本文章制作不易希望大家多多支持呀如有任何问题欢迎各位大佬在评论区批评指正