当前位置: 首页 > article >正文

没有学不会的义务之动态内存管理

为什么要有动态内存管理让程序员自己可以申请和释放空间数组等开辟空间的大小是固定的内存中的不同区malloc函数功能向内存的堆区申请一块连续可用的空间并返回指向这块空间的起始地址。1.如果开辟成功则返回这块空间的起始地址2.如果开辟失败则返回一个NULL指针因此malloc的返回值一定要做检查3.返回值的类型是void*所以malloc函数并不知道开辟空间的类型具体在使用的时候使用者自己做决定申请了一块地方但不知道申请的额这块地方是放什么的所以返回这块空间的起始地址4.如果参数size为0malloc的行为标准是未定义的取决于编译器放0无意义需要的头文件stdlib.hreturn 1表示malloc开辟失败程序非正常结束如果是正常结束应该执行return0free的使用格式free是用来释放动态开辟的内存free释放了空间但是指针的值仍在这是指针就变成了野指针非常危险所以需要手动将指针pNULL(变长数组不能初始化)calloc函数也用来动态内存分配函数的功能是为num个大小为size的元素开辟一块空间并且把空间的每个字节初始化为0与函数malloc的区别在于calloc会在返回地址之前把申请的空间的每个字节初始化为全0realloc函数realloc函数的出现让动态内存管理变得更加灵活realloc函数可以做到对动态开辟内存大小的调整ptr是要调整的内存的地址size是调整之后的新大小单位是字节返回值为调整之后内存的地址若原来的空间后的位置已被分配位置不够则开辟新的一块空间并且将旧的空间里的数据重新拷贝一份到新的空间中返回新的空间的起始地址释放掉旧的地址反之则直接扩大原来空间后的位置并不发生移动realloc函数也可以直接用来申请空间等价于malloc常见的动态内存的错误1.对NULL的解引用因为malloc函数会开辟失败若不判断是否开辟成功就会出现问题。2.对动态内存空间的越界访问实际用的空间大于malloc申请的空间。3.对非动态开辟内存使用free如对数组进行free操作.4.使用free释放动态开辟内存的一部分free释放空间的时候一定要给这块空间的起始位置5.对同一块动态内存多次释放free了一块空间在并没有给这块空间置为空的时候再次free6.动态开辟内存忘记释放谁申请的空间谁释放不使用的空间及时释放自己函数1不方便释放的空间要告诉别人函数2释放题目分析例题1崩溃原因1.str传递给Getmemory时使用的是值传递形参变量p其实是str的一份拷贝当我们把malloc申请的空间的起始地址存放在p中时不会修改strstr依然为空指针。所以当Getmemory函数返回后再去调用strcpy函数需要将“hello world”拷贝到str指向的空间时程序崩溃2.因为malloc申请的空间没有free释放存在内存泄漏例题2结果为随机值原因数组p为局部变量存放在栈区出了作用域就销毁了也就意味着str不可以使用它即使地址被传过去了。返回栈空间的地址当找这个地址时它却被销毁了。修改这道题的方法在char p【】前加上static因为static修饰之后将数组存放在内存的静态区柔性数组c99中结构中的最后一个元素允许是未知大小的数组这就叫做柔性数组的成员这样写有时候会报错可以改成a【】柔性数组的特点1.结构体中的柔性数组成员前面必须至少有一个其他成员2.sizeof返回的这种结构大小不包括柔性数组的内存3.包含柔性数组的结构用malloc函数进行内存的动态分配并且分配的内存应该大于结构体的大小以适应柔性数组的预期大小

相关文章:

没有学不会的义务之动态内存管理

为什么要有动态内存管理:让程序员自己可以申请和释放空间(数组等开辟空间的大小是固定的)内存中的不同区malloc函数功能:向内存的堆区申请一块连续可用的空间,并返回指向这块空间的起始地址。1.如果开辟成功&#xff0…...

sql注入之sql基本语法

(持续更新)学习网站推荐:www.w3school.com.cnsqlzoo.net一、SELECT查询语句SELECT 列 FROM 表 WHERE 条件;SQL SELECT 语法SELECT 列名称 FROM 表名称以及:SELECT * FROM 表名称1.SELECT population FROM world WHERE name Germany主要目的是输出人口&a…...

字节码优化、存储布局与那次成功的“代码混淆”

# 字节码优化、存储布局与那次成功的“代码混淆”## 引言:从一个小想法到一场技术革命故事要从几年前的一个午后说起。当时我们团队正在为一个嵌入式设备开发一套领域特定语言(DSL)。设备资源有限,我们需要一个轻量级的虚拟机来执…...

简中互联网“四大恶人”批判:一种数字生存境况的技术社会学分析

內容來自知乎:https://www.zhihu.com/question/660840540 # 简中互联网“四大恶人”批判:一种数字生存境况的技术社会学分析 ## 引言:被围困的数字日常 2026年的今天,当你打开手机准备查询地铁线路,仅仅因为起身时轻…...

RAG——RAG生成(大模型)

目录 一、前提 二、大模型发展 三、大模型原理 四、RAG 中如何选择大模型 本文来源:极客时间vip课程笔记 注:后续技术类文章会同步到我的公众号里,搜索公众号 小志的博客 感兴趣的读友可以去找来看看。 一、前提 RAG 的本质是通过为大模型提供外部知识来增强其理解和回答领…...

IntelliJ IDEA 4个必改配置:主题字体+代码提示+免费AI插件,让你的开发体验起飞

IntelliJ IDEA 被誉为 Java 开发最好用的工具,但默认配置不一定适合每个人。默认的暗黑主题在白天长时间开发容易眼疲劳;默认字体偏小,盯着看一会儿眼睛就酸;默认的代码提示严格区分大小写,输入小写就找不到大写开头的…...

HelloWorld的前世今生:用IntelliJ IDEA编写人生第一个Java程序

为什么全世界所有编程语言的第一个例子,都是输出“Hello World”?这个传统来自C语言之父丹尼斯里奇的经典著作《C程序设计语言》。在这本书中,第一个示例程序就是输出“Hello World”。由于C语言是绝大多数编程语言的鼻祖,后续Jav…...

计算机毕业设计springboot高校体育竞赛管理系统 基于SpringBoot的高校体育赛事综合服务平台设计与实现

计算机毕业设计springboot高校体育竞赛管理系统48825p75(配套有源码 程序 mysql数据库 论文) 本套源码可以在文本联xi,先看具体系统功能演示视频领取,可分享源码参考。随着高校体育事业的蓬勃发展和校园文化建设需求的不断提升,传…...

计算机毕业设计springboot就业岗位推荐系统 基于SpringBoot的智能职位匹配平台设计与实现

计算机毕业设计springboot就业岗位推荐系统a6nq8o76(配套有源码 程序 mysql数据库 论文) 本套源码可以在文本联xi,先看具体系统功能演示视频领取,可分享源码参考。随着数字化转型的深入推进,人力资源市场正经历从传统招聘模式向智…...

2025年智能座舱交互革命:从语音助手到多模态AI中枢

1. 告别“人工智障”:为什么你的车载语音助手总在关键时刻掉链子? 不知道你有没有过这样的经历:开车时想调低空调温度,对着车机喊了好几声“你好,XX”,它要么没反应,要么答非所问,最…...

R 4.5量化回测合规红线预警:证监会《证券期货业回测系统技术规范》V2.3落地后,这7类代码将被认定为无效回测

第一章:R 4.5量化回测合规性总览R 4.5 版本在统计计算与金融建模领域引入了多项增强机制,尤其在回测框架的可审计性、随机数生成确定性、时间序列对齐一致性及浮点运算精度控制方面,显著提升了量化策略回测结果的合规可信度。监管机构&#x…...

STEP3-VL-10B部署案例:边缘计算节点部署10B模型实现离线多模态推理

STEP3-VL-10B部署案例:边缘计算节点部署10B模型实现离线多模态推理 1. 引言 想象一下,你正在一个网络信号不稳定的野外现场,或者在一个对数据安全要求极高的企业内部,需要快速分析一张复杂的工程图纸,或者理解一段带…...

如何用Dify在24小时内完成传统需2周的人工评估闭环?——金融客服场景下LLM-as-a-judge SLO达标实践白皮书

第一章:LLM-as-a-judge在金融客服评估中的范式革命传统金融客服质量评估长期依赖人工抽检、规则引擎与预设话术匹配,存在覆盖率低、主观性强、反馈滞后等结构性瓶颈。大语言模型作为裁判(LLM-as-a-judge)的引入,正推动…...

通义千问3-Reranker-0.6B实战案例:直播带货话术与商品信息匹配

通义千问3-Reranker-0.6B实战案例:直播带货话术与商品信息匹配 1. 直播带货的痛点与解决方案 直播带货现在火得不得了,但有个问题一直困扰着主播和运营团队:说的话和卖的商品经常对不上。你可能也遇到过这种情况——主播说得天花乱坠&#…...

Emilia数据集:6种语言10万小时语音生成技术的突破与应用

1. Emilia数据集:一个改变游戏规则的多语言语音宝库 如果你最近在关注语音合成(TTS)或者语音生成领域,那你大概率已经听过“Emilia”这个名字了。它就像一个突然出现在舞台中央的超级新星,让整个圈子都兴奋了起来。简…...

第7章:Docker network网络管理_(网络驱动类型)

第7章:Docker network网络管理(网络驱动类型) 在现代容器化应用部署中,Docker网络管理是确保服务可靠通信的关键环节。除了基础的网络连接操作外,Docker提供了一系列高级网络功能,能够满足复杂场景下的网络需求。本文将解析三个高级网络管理命令: docker network connec…...

连续时间马尔科夫链:从理论到生灭过程的应用解析

1. 从排队到种群:为什么我们需要连续时间马尔科夫链? 想象一下,你正在一家网红奶茶店排队。队伍的长度时增时减,有人买完离开(“死亡”),也有新顾客加入队尾(“出生”)。…...

UNIAPP 上架审核指南:精准应对 Guideline 5.1.2 数据追踪与隐私合规

1. Guideline 5.1.2 到底是什么?为什么你的UNIAPP应用会踩坑? 最近不少用UNIAPP开发iOS应用的朋友,在提交App Store Connect审核时,都遇到了一个让人头疼的拒绝理由:Guideline 5.1.2。苹果给出的原文通常很长&#xf…...

文件描述符fd:跨进程共享机制

文件描述符跨进程资源共享机制详解 文件描述符作为 Unix/Linux 系统的核心抽象机制,通过精巧的内核设计实现了高效的跨进程资源共享。下面从技术原理、实现机制和实际应用三个维度深入解析这一过程。 一、核心技术原理 1. 文件描述符的本质 文件描述符实际上是进…...

实战避坑指南:基于RocketMQ 5.2 Proxy的两主两从集群部署与关键配置解析

1. 为什么你需要这份“踩坑”指南? 最近有不少朋友在后台问我,想在生产环境部署RocketMQ 5.2的集群,特别是带Proxy的两主两从架构,但照着网上一些零散的教程做,总是卡在某个环节,要么服务起不来&#xff0c…...

天地图结合GeoJSON实现中国行政区划可视化开发指南

1. 为什么选择天地图GeoJSON做行政区划可视化? 如果你正在做一个政务系统、数据分析平台,或者任何需要在地图上清晰展示中国省、市、县边界的项目,那你大概率绕不开“行政区划可视化”这个需求。几年前,我为了这个功能可没少折腾&…...

从零到一:Gemini AI Studio 实战部署与避坑指南

1. 初识 Gemini AI Studio:你的 AI 应用“游乐场” 如果你对 AI 感兴趣,想自己动手做个聊天机器人、智能助手,或者任何带点“智能”的小应用,但一看到“模型训练”、“微调”、“部署”这些词就头疼,觉得那是专业开发…...

Crystals Kyber密钥封装机制解析:从LWE问题到实际应用

1. 为什么我们需要Kyber?从RSA的“中年危机”说起 如果你用过网银、登录过邮箱,或者只是在网站上看到那个小锁图标,那你其实已经和公钥密码学打过无数次交道了。我们最熟悉的老朋友,莫过于RSA和ECC(椭圆曲线密码&#…...

Windsurf实战:AI代码编辑器的智能协作开发全解析

1. 初识Windsurf:不只是编辑器,更是你的AI编程搭档 如果你还在用传统的代码编辑器,每天重复着敲击键盘、查找文档、调试错误的循环,那今天这篇文章可能会彻底改变你对编程的认知。Windsurf,这款在2024年底横空出世的AI…...

揭秘这款零成本抢票神器:十年口碑,无广告无加速包!

1. 为什么你需要一个“干净”的抢票工具? 又到了一年一度考验手速和网速的时候了。打开手机里那些主流的购票App,想抢张回家的票,迎面而来的不是“助力加速”,就是“VIP光速通道”,各种加速包、会员权益的弹窗让人眼花…...

金蝶EAS uploadlogo任意文件上传漏洞深度分析与防护策略

1. 从一次“意外”的服务器告警说起 那天下午,我正在工位上摸鱼,突然手机开始疯狂震动,一看是监控平台的告警短信,提示某台核心业务服务器的CPU使用率飙升到了98%。我心里咯噔一下,赶紧连上去看。登录服务器一看&#…...

【光影绘梦】触控灯光画小夜灯:基于PT2023S8与SY7200A的双色温无极调光DIY方案解析

【光影绘梦】触控灯光画小夜灯:从电路到实物的DIY全解析 最近有不少朋友问我,想自己动手做一个既有颜值又有科技感的小夜灯,最好还能触摸调光调色温,有没有什么好的方案?这不,我最近刚好用立创的元器件和工…...

lsquic实战《一》—— 架构解析与核心概念入门

1. 初识lsquic:它是什么,以及为什么选择它 如果你正在寻找一个用C语言实现的、功能齐全且文档相对友好的QUIC协议库来开发你的网络应用,那么lsquic很可能已经进入了你的视野。我当初选择它,也是基于类似的考量:项目需要…...

AirSim实战指南:从零构建Python无人机控制脚本

1. 环境准备:搭建你的第一个AirSim仿真世界 想用Python控制无人机在天上自由翱翔,听起来很酷对吧?但别急着写代码,咱们得先把“舞台”搭好。这个舞台就是AirSim,一个由微软开源的、基于游戏引擎(通常是Unre…...

从零到一:在Ubuntu上配置SSH服务并用MobaXterm实现安全远程访问

1. 为什么你需要远程访问Ubuntu?从场景聊起 想象一下这个场景:你刚拿到一台性能不错的服务器,或者在自己的电脑上装好了Ubuntu系统,准备大干一场。但机器放在书房角落,或者干脆是托管在机房的云服务器,你总…...