目录
一.malloc函数
二.其他注意事项
三.视频教程
在定义变量的时候会在内存中申请空间。除了在定义变量的时候申请内存空间,也可以使用库函数动态申请内存,
一.malloc函数
作用:动态申请一块连续的任意尺寸的内存空间。
函数原型:void *malloc(size_t size);
头文件:#include <stdlib.h>
为什么返回值void *,可以他可以被转换成任意类型的指针。
函数返回值:成功返回指向申请完的内存空间的指针,失败返回NULL。
举例:
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int *p;
p = (int *)malloc(sizeof(int));
if(p == NULL){
printf("malloc error\n");
return -1;
}
printf("Please enter an int type of data\n");
scanf("%d",p);
printf("data is %d\n",*p);
free(p);
return 0;
}
运行结果:
需要注意的是,malloc函数必须和free函数成对出现。
函数原型:
void free(void *ptr);
作用:释放ptr指向的内存空间。这个空间必须由malloc,calloc,realloc函数申请。realloc和calloc也是动态申请内存的函数,这里不做介绍。
也就是说必须使用free函数释放内存,否则会发生内存泄漏。
发生内存泄漏的例子:
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int *p;
while (1)
{
p = (int *)malloc(sizeof(int));
if(p == NULL){
printf("malloc error\n");
return -1;
}
}
return 0;
}
如果运行,等内存全部使用完毕,系统会自动kill掉该程序。甚至在运行过程中,一些性能不好的电脑会卡住。运行结果:
二.其他注意事项
1.也可以这样使用申请任意大小的空间:(指针类型*)malloc(sizeof(指针类型)*数据数量)
三.视频教程
79.动态申请内存_哔哩哔哩_bilibili