| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> C++知识库 -> C语言动态内存管理 -> 正文阅读 |
|
[C++知识库]C语言动态内存管理 |
1.首先我们要知道为什么要动态内存管理: a.我们平时申请的内存空间大多是以数组形式申请的,所以它的大小都是固定的(就是数组的长度).它所给的长度在编译时就已经确定,之后无法更改. b.当我们输入的数据把数组填满时,就无法再输入数据了,如果再输入就会发生内存越界,系统就会崩溃.因此我们就必须使用动态内存管理了,这样我们在数据填满空间之后,就可以再次按自己的需要扩大空间了. 2.知道以上两点我们就知道了动态内存管理的重要性了,因此接着介绍四个动态内存管理的相关函数了.(malloc,free,calloc,realloc). a. void* malloc (size_t size); (1).这个函数向内存申请一块连续可用的空间,并返回指向这块空间的指针。 如果开辟成功,则返回一个指向开辟好空间的指针。 如果开辟失败,则返回一个NULL指针,因此malloc的返回值一定要做检查。 返回值的类型是 void* ,所以malloc函数并不知道开辟空间的类型,具体在使用的时候使用者自己 来决定。 如果参数 size 为0,malloc的行为是标准是未定义的,取决于编译器。 (2).然后看函数参数类型,(size)大小,内存块的大小,以字节为单位。(size_t)是无符号整数类型。因此我们申请空间的时候参数填的是所申请空间的大小(字节数). 下面举个实例来说明上面两点:
看运行结果: 内容成功打印. b. void* calloc (size_t num, size_t size); (1).函数的功能是为 num 个大小为 size 的元素开辟一块空间,并且把空间的每个字节初始化为0。 与函数 malloc 的区别只在于 calloc 会在返回地址之前把申请的空间的每个字节初始化为全0。 (2).同上我们看看函数参数类型,size代表字节数,num代表申请多少个大小为size的空间.(所申请的空间大小依然为字节数) (3).因为这个函数与malloc的功能大抵相同所以我们在这里就不举例说明了.平时我们几乎也不会用到这个函数来申请空间. c. void free (void* ptr); (1).在上面我们已经使用过这个函数了,需要记住的是free是配合malloc.calloc.realloc三个共同使用,每当我们所申请的空间使用完之后都需要使用free释放空间(对于一个完整的系统来说根据需要进行释放). (2).其中的参数是所申请的空间的首地址,也就是存放空间首地址的指针:free(ptr),需要注意的是释放之后的指针就成了一个野指针了,再也不可以使用了. (3).不可以重复释放 (4).如果不释放,就可能会造成内存泄漏 d. void* realloc (void* ptr, size_t size); (1).ptr 是要调整的内存地址 ,size 调整之后新大小 返回值为调整之后的内存起始位置。 这个函数调整原内存空间大小的基础上,还会将原来内存中的数据移动到 新 的空间。 realloc在调整内存空间的是存在两种情况: 情况1:原有空间之后有足够大的空间,情况2:原有空间之后没有足够大的空间. (2).总的来说就是,先输入所要改变的空间的指针:ptr,然后在输入改变之后的大小,最后它的返回值是一个地址,这个地址就是改变之后空间的首地址. 下面举个实例来说明上面两点:
看运行结果 ?申请之后的空间成功打印. e.柔性数组(现在我们几乎已经不使用了在这不做过多介绍). |
|
C++知识库 最新文章 |
【C++】友元、嵌套类、异常、RTTI、类型转换 |
通讯录的思路与实现(C语言) |
C++PrimerPlus 第七章 函数-C++的编程模块( |
Problem C: 算法9-9~9-12:平衡二叉树的基本 |
MSVC C++ UTF-8编程 |
C++进阶 多态原理 |
简单string类c++实现 |
我的年度总结 |
【C语言】以深厚地基筑伟岸高楼-基础篇(六 |
c语言常见错误合集 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/24 5:50:21- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |