news 2026/4/23 5:09:22

动态内存管理

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
动态内存管理

一.动态内存管理

1.malloc

void malloc (size_t size);

这个函数向内存申请一块连续可用的空间,并返回指向这块空间的指针

如果开辟成功,则返回一个指向开辟空间的指针

如果开辟失败,则返回一个NULL,因此malloc的返回值一定要做检查

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

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

注意:malloc的使用需要包含头文件stdlib.h

例子:

int main() { int*p = (int*)malloc(5 * sizeof(int)); if (p == NULL) { perror("malloc"); return 1; } int* p = (int*)calloc(5, sizeof(int)); if (p == NULL) { perror("malloc"); return 1; } int i = 0; for (i = 0; i < 5; i++) { printf("%d ", *(p + i)); } free(p); p = NULL; return 0; }

2.free

c语言提供了另外一个函数free,专门用来做动态内存的释放和回收

函数原型

void free (void* ptr);

free函数用来释放动态开辟的内存

如果参数ptr指向的空间不是动态开辟的,那free函数的行为是未定义的

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

使用同样需要包含头文件stdlib.h

注意:free的本质是把空间的使用权限还给操作系统,但是p的地址还有其他地址任然存在,此时的p就是野指针,之后需要给p赋值空指针p = NULL

还有一点,在释放时,p必须是第一个空间的地址。

3.calloc

在c语言中calloc同样用来动态内存分配,函数原型如下:

void* calloc (size_t num,size_t size);

函数的功能是为num个大小为size的元素开辟一块空间,并且把空间的每一个字节赋值为0

与函数malloc的区别是会在返回地址之前把申请空间的每一个字节初始化为0

4.realloc

realloc函数让动态内存管理更加灵活

我们可以使用realloc对开辟的内存空间进行灵活调整,函数原型如下:

void* realloc (void* ptr, size_t size);

ptr是要调整的内存地址

size是调整之后的新大小

返回值是调整之后的内存的起始位置

这个函数在调整原内存空间大小的基础上,还会将原来内存空间数据挪到新空间

realloc调整内存空间的是存在两种情况

情况一:原空间之后有足够大的空间

情况二:原空间之后没有足够大的空间

情况二会在堆区的内存中新找一块空间,并且满足新的大小要求,会将原来空间数据拷贝一份到新的空间,然后释放旧的空间,并且返回新的内存空间的起始地址

情况三:如果彻底调整失败会返回空指针

所以接收时应该这样接收

int*ptr = (int*)realloc(p, 4000); if (ptr != NULL) //调整成功 { p = ptr; }
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/18 20:46:42

P2SH:比特币的「脚本保险箱」与比特鹰的技术解析

P2SH&#xff08;Pay to Script Hash&#xff09;是比特币实现灵活交易逻辑的核心技术&#xff0c;通过将复杂脚本转化为20字节哈希&#xff0c;兼顾安全性与易用性。比特鹰将解析其运作机制、典型应用及技术权衡。P2SH工作原理&#xff1a;比特鹰的三步拆解 比特鹰为你总结&am…

作者头像 李华
网站建设 2026/4/21 8:43:53

macOS存储空间不足?3步解锁远程存储新方案

macOS存储空间不足&#xff1f;3步解锁远程存储新方案 【免费下载链接】iSCSIInitiator iSCSI Initiator for macOS 项目地址: https://gitcode.com/gh_mirrors/is/iSCSIInitiator 还在为Mac电脑存储空间捉襟见肘而烦恼吗&#xff1f;想要像专业人士一样管理网络存储资源…

作者头像 李华
网站建设 2026/4/23 5:07:33

Ruby编程语言下载指南及背后的技术现状分析

作为一个接触Ruby多年的开发者&#xff0c;我想说&#xff0c;下载Ruby本身只是一个简单的技术动作&#xff0c;但这件事背后&#xff0c;却折射出这门语言目前在生态和定位上的一些困境。它曾因Ruby on Rails框架而风靡一时&#xff0c;但如今在快速迭代的技术浪潮中&#xff…

作者头像 李华
网站建设 2026/4/22 19:39:05

C++ Builder 6.0视频教程怎么选?这些要点要知道

要系统学习C Builder 6.0&#xff0c;找到一套合适的视频教程是关键。这门经典的RAD工具在快速开发Windows桌面应用上仍有其价值&#xff0c;但如今相关的学习资源已显老旧且分散。挑选教程时&#xff0c;不应只看其是否存在&#xff0c;更要评估其内容是否切合当下的学习环境和…

作者头像 李华
网站建设 2026/4/16 19:58:01

利用AI编写属于自己的软件(附提示词)

目标很明确:让读者真正理解——为什么、以及如何,去“完全替代软件本身”,而不是继续依附于不可控的软件供应方,让掌控权回到使用者手中。 ——非常少数人会提前意识到、但迟早所有人都要面对的事情 从简单工具到复杂系统 如何一步步替代现有软件,让软件的掌控权回到使用…

作者头像 李华
网站建设 2026/4/21 14:49:03

用Dify搭建企业级知识库(详细教程)小白到精通,一篇全掌握!

本文详细介绍了如何使用Dify搭建企业级知识库&#xff0c;首先解释了知识库不仅是文档存储&#xff0c;更是结构化可检索的数据系统&#xff0c;然后阐述了本地私有知识库对解决数据安全、定制化需求和合规要求的重要性。文章提供了从环境准备、文档上传、文本分段清洗到对话应…

作者头像 李华