0
点赞
收藏
分享

微信扫一扫

C语言的动态内存

罗子僧 2022-02-10 阅读 63

这里我将会在下面讲述一下,C语言中的动态内存分配,

知识总结:

1.在申请好空间之后,我们必须要释放申请空间,不然会造成内存泄露

2.free在释放内存之后要将内存指针设置为NULL,不然会产生野指针

3.使用动态内存的常见错误:判断指针是否为NIULL,直接引用、开辟内存的越界访问、对非动态内存的free释放、对一块动态内存的多次释放、没有对动态内存的释放,下面有详细的例子

一、动态内存分配的存在必要

我们在使用数组时,一旦声明,它们的内存大小就已经确定,不能改变大小,就可能造成内存不足或者内存浪费的问题。

二、动态内存函数的介绍

2.1 malloc与free

 

malloc的使用当中我们要知道的:

1.malloc申请的是连续的空间,返回的是该指向该空间的指针

2.开辟成功,即返回该指向该空间的指针,开辟失败,返回空指针,所以在使用前我们需要进行判断

3.返回的指针类型是void*,所以我们在使用当中要强制类型转化为我们使用的类型

4.它的函数参数就是我们要开辟的空间大小,以字节为单位

free的使用:

1.他几乎与动态内存的申请成对出现,专门用来做动态内存的释放

2.如果它的参数是非动态内存的指针,它不会进行操作

2.2 calloc函数

相比malloc函数,calloc函数更加”懂规矩“,

 

calloc函数

1.它的使用与malloc函数几乎一致,不同的是calloc函数会将开辟的空间初始化为0

2.calloc函数的返回参数同样是void%*指针,

3.他的参数有俩个,是申请num个大小为size的元素空间

2.3realloc函数

它则更加的灵活,便于管理

 

在使用realloc函数的时候,他的情况也更加复杂

 

对于情况1:

扩展内存就直接原有内存之后直接追加空间,原来空间的数据不发生变化

对于情况2:

当是情况2 的时候,原有空间之后没有足够多的空间时,扩展的方法是:在堆空间上另找一个合适大小的连续空间来使用。这样函数返回的是一个新的内存地址

三、常见的动态内存中的常见错误

3.1 对NULL指针的解引用操作

 

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

 

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

 

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

 

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

 

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

它不会产生错误提醒,但是存有潜在的危险——内存泄露

举报

相关推荐

0 条评论