[2022/3/3]C语言malloc函数相关
在程序中使用链表,难免会遇到需要动态申请变量,这时候就需要用到malloc函数
在《数据结构》教材上,许多同学遇到了malloc与free函数,但书上并没有详细进行解释,我在这里给大家简单科普一下
- malloc函数是什么?
malloc()是动态内存分配函数,用来向系统请求分配内存空间。malloc是 memory allocate 的缩写,即“分配内存”。要调用它必须要包含头文件<stdlib.h>。
- 函数原型
#include<stdlib.h>
void *malloc(unsigned long size);
- 使用方式
int n;
int i;
int *a;
scanf("%d", &n);
a = (int*)malloc(sizeof(int)*n);//为数组a申请n个整型大小空间
但是malloc只管分配内存空间,并不能对分配的空间进行初始化,所以申请到的内存中的值是随机的
通常会使用memset()进行初始化后再使用
使用后如图所示
函数原型如下
void *memset(void *str, int c, size_t n)
代码实例
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main()
{
int n;
int i;
int *num;
scanf("%d", &n);
num = (int*)malloc(sizeof(int)*n);//为数组a申请n个整型大小空间
memset(num,0,sizeof(int)*n);
for (i=0; i<n; i++)
{
printf("%d\n", num[i]);
}
return 0;
}
- free()函数
free()的作用是对动态分配的内存进行释放。如果你申请过的空间不需要了,那么就需要使用free()将malloc()申请的空间还给系统。但实际上程序结束后,这些内存会被自动释放掉
这里提供一个free实例供参考,感兴趣的朋友自行百度
#include <stdio.h>
#include <stdlib.h>
int main()
{
char *str;
str = (char *) malloc(15);//申请内存
free(str);//释放内存
return(0);
}
总结
- malloc申请的内存,一旦申请成功,就只能为你所用,其他地方的malloc无法申请到这块内存;
- free释放内存后,这块内存重获自由,程序其他地方调用malloc,有可能系统会把这块内存分配出去;
作者:WWQ