动态内存分配
- 1. 概念
- 2. 优点
- 临时决定需要分配的存储区数量
- 生命周期自己决定
- 以前讲声明变量,在变量生命周期开始的时候,计算机为变量分配存储区,生命周期结束的时候,计算机把变量的存储区收走。而动态内存分配是我们需要的时候,要求计算机为我们分配存储区,并且计算机不会主动把存储区收走
- 3. 使用方法
- malloc 函数可以动态分配一组连续的字节, 返回类型是 void *, 下面用强制类型转换成 int *
int *p_val = (int *)malloc(5 * sizeof(int));
free(p_val);
-
- calloc 函数也可以动态分配内存并且把内存内容都设置成0
- calloc用法和 malloc 基本一样,最大区别就是malloc 分配的存储区内容是随机的
int *p_val = (int *)calloc(5, sizeof(int));
-
- 以上函数使用之前都需要包含 stdlib.h 头文件
-
- 动态分配内存和数组的结构一样,可以把 p_val 当做数组名称来使用动态分配内存
-
- 动态分配内存释放之前可以在不同的函数间自由传递(比如调用函数使用被调函数的存储区),因为动态分配内存的生命周期是由程序来管理的
#include <stdio.h>
#include <stdlib.h>
int main() {
int *p_val = (int *)malloc(5 * sizeof(int));
int *p_val1 = (int *)calloc(5, sizeof(int));
if (p_val) {
free(p_val);
p_val = NULL;
}
return 0;
}
#include <stdio.h>
#include <stdlib.h>
int main() {
int *p_val = (int *)malloc(5 * sizeof(int));
if (!p_val) {
return 0;
}
free(p_val);
p_val = NULL;
return 0;
}