1.为什么要动态分配内存
有的时候我们需要的空间大小只有在程序运行的时候才知道,这时候之前数组编译开辟空间的方式就不能满足了
C语言引入了动态内存开辟,让程序员资金就可以申请和释放空间,这样就比较灵活了
2.malloc和free
2.1 malloc
C语言提供了一个动态内存开辟的函数:
void* malloc(size_t size);这个函数像内存申请了一快连续可用的空间,并返回这块空间的指针
- 如果开辟成功,则返回指向这块空间的指针
- 如果开辟失败,则返回一个NULL指针,因此malloc的返回值必须要做一个检查
- 返回类型是void*,所以返回类型需要自己决定
- 如果参数size为0,malloc的行为标准是未定义的,取决于编译器
2.2 free
C语言提供了另外一个函数free,专门是用来做动态内存的释放和回收的,函数原理如下:
void free(void *ptr);free是用来释放动态开辟的内存。
- 如果参数ptr指向的空间不是动态开辟的,那free的行为是未定义的
- 如果参数ptr是NULL指针,则函数什么事都不用做
malloc和free都声明在stdlib.h头文件中
举个例子:
#include<stdio.h> #include<stdio.h> int main(){ int num=0; scanf("%d ",%&num); int arr[num]={0}; int *ptr=NULL; ptr=(int*)malloc(sizeof(int)*num); if(NULL!=ptr){ int i=0; for(i=0;i<num;i++){ } } }