本篇博客将讲解以下知识点:
(1)为什么要有动态内存分配(2)malloc和free
1、为什么要有动态内存分配
我们已经掌握的内存开辟方式有:
int val = 40;//向内存中申请4个字节空间存储val
char arr[10];//向内存申请10个字节空间
上述的开辟空间的方式有两个特点:
(1)空间的开辟大小是固定的,一旦申请好空间,大小就无法调整。
(2)数字在声明的时候,必须指定数组的长度,数组空间一旦确定了,大小不能调整。
C语言中引入了动态内存开辟,让程序员自己可以申请和释放空间。
2、malloc和free
(1)malloc
注意:使用malloc函数时要包含头文件:stdlib.h
C语言提供了一个动态内存开辟的函数:
void* malloc( size_t size)
size的单位是字节,malloc(50)意思是向内存申请50个字节的空间。
注意:这个函数向内存申请一块连续可用的空间,并返回指向这块空间的起始地址。
1))如果开辟成功,则返回一个指向开辟好的空间的起始地址。
2))如果开辟失败,则返回一个NULL指针,因此malloc的返回值一定要做检查。
3))返回值的类型是void*,所以malloc函数并不知道开辟空间的类型,具体在使用的时候有使用者自己来决定。
4))如果参数size_t为0,malloc的行为是标准未定义的,取决于编译器。
内存分配:
栈区中存储:局部变量、形式参数
堆区中存储:malloc、free、realloc、calloc
静态区中存储:静态变量、全局变量
示例:
(2)free
注意:使用free函数时,要包含头文件:stdlib.h
C语言提供了一个函数free,专门用来做动态内存的释放和回收。
函数原型:
void* free(void* ptr)
注意:ptr是要释放空间的起始地址。
free函数用来释放动态开辟的内存。
1))如果参数ptr指的空间不是动态开辟的,则free函数的行为是未定义的
2))如果参数ptr是NULL指针,则free函数什么也不做。
malloc函数和free函数都声明在:stdlib.h头文件中。
标签:malloc,函数,管理,free,C语言,动态内存,空间,开辟 From: https://blog.csdn.net/hefaxiang/article/details/142923950