自学内容网 自学内容网

【C语言】动态内存管理(上)

本篇博客将讲解以下知识点:
(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头文件中。


原文地址:https://blog.csdn.net/hefaxiang/article/details/142923950

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!