news 2026/1/15 10:04:18

动态内存管理

作者头像

张小明

前端开发工程师

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/1/11 15:20:11

Kotaemon短视频文案策划:抖音/B站风格适配

Kotaemon短视频文案策划&#xff1a;抖音/B站风格适配 在B站刷到一个“AI学习入门”的视频&#xff0c;开头那句“你还在用笨办法啃论文&#xff1f;别卷了&#xff0c;这波操作直接起飞&#xff01;”瞬间抓住眼球&#xff1b;转头去抖音&#xff0c;同样的主题却变成了“震惊…

作者头像 李华
网站建设 2026/1/11 15:20:09

Kotaemon能否自动生成PPT大纲?办公效率提升利器

Kotaemon能否自动生成PPT大纲&#xff1f;办公效率提升利器 在企业会议前的深夜&#xff0c;你面对着堆积如山的产品文档、市场分析和战略规划&#xff0c;却迟迟无法动笔写那份关键汇报的PPT。从零开始梳理逻辑结构、提炼核心观点、组织章节顺序——这不仅是重复劳动&#xf…

作者头像 李华
网站建设 2026/1/11 15:20:06

OpenAI又开源了!仅0.4B,给模型大瘦身

OpenAI开源Circuit-Sparsity技术&#xff0c;通过强制99.9%权重为零&#xff0c;使大模型内部形成紧凑可读的"电路"&#xff0c;显著提升可解释性。稀疏模型神经元激活具有明确语义&#xff0c;电路规模比密集模型小16倍&#xff0c;解决了AI"黑箱"问题。尽…

作者头像 李华
网站建设 2026/1/11 15:20:04

immunedeconv:5步掌握免疫细胞去卷积核心技术

immunedeconv&#xff1a;5步掌握免疫细胞去卷积核心技术 【免费下载链接】immunedeconv 项目地址: https://gitcode.com/gh_mirrors/imm/immunedeconv 你是否曾面对复杂的肿瘤样本数据&#xff0c;想要了解其中各类免疫细胞的具体比例却无从下手&#xff1f;&#x1f…

作者头像 李华
网站建设 2026/1/12 5:28:33

CompareM基因组比较工具完整教程:从零开始掌握微生物基因组分析

CompareM基因组比较工具完整教程&#xff1a;从零开始掌握微生物基因组分析 【免费下载链接】CompareM 项目地址: https://gitcode.com/gh_mirrors/co/CompareM 想要快速上手CompareM这款强大的基因组比较工具吗&#xff1f;这篇完整教程将带你从零开始&#xff0c;掌握…

作者头像 李华
网站建设 2026/1/12 5:28:31

Amlogic S9xxx OpenWrt固件2025.06版本:技术深度评测与实战指南

Amlogic S9xxx OpenWrt固件2025.06版本&#xff1a;技术深度评测与实战指南 【免费下载链接】amlogic-s9xxx-openwrt Support for OpenWrt in Amlogic, Rockchip and Allwinner boxes. Support a311d, s922x, s905x3, s905x2, s912, s905d, s905x, s905w, s905, s905l, rk3588,…

作者头像 李华