0x01 理论

在程序运行的时候临时决定需要分配多少存储区空间,这种方法叫动态内存分配
为了使用动态内存分配,需要用到一组标准函数,包含标准头文件 stdlib.h

malloc
函数原型:extern void *malloc(unsigned int num_bytes);
功能:可以动态分配一组连续的字节
说明1:这个函数需要一个整数类型参数表示需要分配的字节个数
返回值:
     分配成功,分配好的第一个字节的地址
     分配失败,返回NULL
说明2:这个函数把返回值放到一个无类型的存储区里,需要首先转换成有类型指针然后才能使用

计算机不会自动回收动态分配的内存,如果程序中不在需要使用某些动态分配的内存,就需要使用专门的语句把它们还给计算机

free
函数原型:void free(void *ptr);
功能:用来释放动态分配的内存
说明:需要动态分配内存的第一个地址作为参数,一起分配的内存必须一起释放

动态内存分配Demo

调用函数可以使用被调用函数动态分配的内存
注:如果使用指针参数参数调用free函数,则函数结束后指针变成野指针,我们要把它分配成空指针

1
2
3
4
5
6
7
8
9
10
11
12
13
//demo 1
#include "stdio.h"
#include "stdlib.h"
int main(){
int *p_num = (int *)malloc(5 * sizeof(int));
if(!p_num){
/* code */
return 0;
}
free(p_num);
p_num = NULL;
return 0;
}

1
2
3
4
5
6
7
8
9
10
11
12
// demo2
#include "stdio.h"
#include "stdlib.h"
int main(){
int *p_num = (int *)malloc(10 * sizeof(int))
if(p_num){
free(p_num);
p_num = NULL;
}
/* code */
return 0;
}