C语言——动态内存管理

大家好,我是残念,希望在你看完之后,能对你有所帮助,有什么不足请指正!共同学习交流
本文由:残念ing原创优快云首发,如需要转载请通知
个人主页:残念ing-优快云博客,欢迎各位→点赞👍 + 收藏⭐️ + 留言📝
📣系列专栏:残念ing 的C语言系列专栏——优快云博客

-----------------------------------------------------------CSDN-------------------------------------------------------------

目录

前言:

1. malloc 和free(  )

1.1 malloc

1.2 free

2. calloc 和 realloc

2.1 calloc 

2.2 realloc

3. 常见的动态内存的错误

3.1 对NULL指针的解引用操作

3.2 对动态开辟空间的越界访问

3.3 对非动态开辟内存使用free释放

3.4 使用free释放一块动态开辟内存的一部分

3.5 对同一块动态内存多次释放

3.6 动态开辟内存忘记释放(内存泄漏)

4. 动态内存经典笔试题分析

题目1:

题目2:

题目3:

题目4:

5. 柔性数组

5.1 柔性数组的特点

5.2 关于柔性数组的使用

5.3 柔性数组的优点

6. C/C++中程序内存区域划分


前言:

为什么要有动态内存管理???

我们平时在开辟空间时是这样的:

int a=10;//在栈空间上开辟4个字节
char arr[10]={0};//在栈空间上开辟10个字节的连续空间

这样开辟的空间有两个弊端:

1、空间开辟是固定不变的

2、数组在申明的时候,必须指定数组的长度,数组空间一旦确定了大小不能调整

我们会遇到很多情况,有时候我们需要的空间大小在程序运行的时候才知道,这时开劈好的空间会不能满足,或者开辟多了,会导致大量的空间浪费。

这就有了动态内存开辟,让程序员可以自己申请需要的空间和释放不需要的空间,这就比较灵活了。

1. malloc 和free( <stdlib.h> )

1.1 malloc

这是一个动态内存开辟的函数:

void* malloc(size_t size);

 作用:可以向内存申请一块连续可用的空间,并返回指向这块空间的指针。

注意:如果开辟成功,则返回一个指针开辟好空间的指针。

           如果开辟失败,则返回一个NULL指针,因此malloc的返回值一定要做判断。

           返回值的指针类型是void* ,所以malloc函数并不知道开辟空间的类型,具体在使用的时候使用者自己来决定。

            如果参数size 为0,malloc的行为标准是未定义的,取决于编译器。

补充:malloc 申请的空间是在内存的堆区的

malloc的使用:

1.2 free

C语言还为我们提供了一个专门用来做动态内存的释放和回收的函数 free :

void free (void* ptr);

作用:用来释放动态开辟的内存。

注意:1、如果参数 ptr 指向的空间不是动态开辟的,那么 free 函数的行为是未定义的。

            2、如果参数 ptr 是NULL指针,则函数什么都不做。

补充:free 只是会把 ptr 指向的空间释放了,但是 ptr 里面还存着那块空间的起始地址,我们为了防止 ptr 后面会成为野指针,我们必须要把 ptr 制为空指针。

free 的使用:

2. calloc 和 realloc

2.1 calloc 

除了malloc外 还有一个 calloc 函数,它也是用来动态内存开辟的:

void* calloc(size
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值