大家好!今天小编给大家带来的是C语言动态内存管理的详细介绍,一起来看看吧!
1.为什么要动态内存管理?
1.1前提
int n = 10;
char c = 'w';
以上有以下特点:
- 一旦开辟空间,大小就固定了
- 数组在声明的时候,必须指定数组长度,数组空间一旦确定大小就不能改变了。
- C语⾔引⼊了动态内存开辟,让程序员⾃⼰可以申请和释放空间,就⽐较灵活了。
1.2学习内容
学习重点:4个函数:malloc,free,calloc,realloc(非常重要)
2.malloc和free
前提:malloc和free都声明在stdlib.h头文件中
2.1 malloc
malloc是C语言中一个动态内存开辟的函数
void* malloc (size_t size);//参数是大小,单位:字节
这个函数向内存申请⼀块连续可⽤的空间,并返回指向这块空间的指针。
- 如果开辟成功,返回一个指向开辟好空间的指针。
- 如果开辟失败,返回一个NULL指针,因此malloc的返回值一定要检查。
- 返回值的类型是void*,开辟空间的类型具体由使用者自己而定。
- 如果参数 size 为0,malloc的⾏为是标准是未定义的,取决于编译器。
int* p = (int*)malloc(20);
//向内存申请20个字节-5个整数放在数组中
2.2 free
free是专门用来做动态内存的释放和回收的
void free (void* ptr);
注意:free是用来释放动态开辟的内存的
- 如果参数ptr指向的空间不是动态开辟的内存,则free的行为无效。
- 如果参数 ptr 是NULL指针,则函数什么事都不做。
举例:
#include <stdio.h>
#include <stdlib.h>
int main()
{
//20 个字节 - 存放5个整数
int* p = (int*)malloc(20);
if (p == NULL)//检查是不是空指针
{
perror("malloc")