发布时间:2026/8/21 10:14:38
C语言动态内存分配 学习笔记 职坐标学习 C语言动态内存分配 学习笔记一、动态内存的概念与分类1. 为什么需要动态内存栈内存的局限大小固定定义变量或数组时空间大小在编译时就已确定如int arr[10]。生命周期受限函数调用结束后栈上的局部变量会自动释放。动态内存的优势按需分配在程序运行时根据需要申请内存大小可变。手动管理生命周期由程序员控制直到显式释放。灵活性强适合处理大小不确定的数据如用户输入、文件读取。2. 核心类比租赁仓库静态内存 (栈)就像买了一个固定大小的仓库无论用不用空间都占着。动态内存 (堆)就像租仓库需要多少租多少用完就退租。malloc 去仓库管理员那里申请租用。free 退租归还。内存泄漏 忘记free永远占着仓库不退。双重释放 同一个仓库退了两次。3. 内存基础内存 (主存储器)CPU可以直接访问的临时存储部件读写速度快但断电后数据丢失。大小端序多字节数据在内存中的存储顺序。大端序高位字节存在低地址人类阅读习惯网络传输标准。小端序低位字节存在低地址Intel x86架构运算效率高。二、动态内存管理函数1. malloc 和 freemalloc(Memory Allocation)原型void* malloc(size_t size);作用在堆区分配指定字节数的内存。返回值成功返回void*指针需强制类型转换失败返回NULL。特点不初始化内存中是随机的“垃圾值”。free原型void free(void* ptr);作用释放ptr指向的内存块。注意释放后应将指针置为NULL防止野指针。代码示例malloc 与 free1#include stdio.h 2#include stdlib.h 3 4int main() { 5 // 1. 分配内存 (5个int的大小) 6 int* arr (int*)malloc(5 * sizeof(int)); 7 8 // 2. 检查是否分配成功 9 if (arr NULL) { 10 printf(内存分配失败!\n); 11 return 1; 12 } 13 14 // 3. 使用内存 15 for (int i 0; i 5; i) { 16 arr[i] i * 10; 17 } 18 19 // 4. 释放内存 20 free(arr); 21 arr NULL; // 避免野指针 22 23 return 0; 24}2. calloc原型void* calloc(size_t num, size_t size);作用分配num个大小为size的连续内存块。特点自动将所有字节初始化为 0。类比预订并打扫干净的酒店房间入住即用。对比malloc vs calloc特性malloc(size)calloc(num, size)初始化未初始化 (随机值)初始化为 0参数总字节数元素个数, 单个元素大小速度稍快稍慢 (需清零)场景后续会覆盖数据需要初始值为0 (如计数器、数组)3. memset (辅助初始化)原型void* memset(void* ptr, int value, size_t num);作用将ptr指向的内存块的前num个字节设置为value。注意按字节填充。设置int数组为1时每个字节变为0x01结果不是1而是16843001(0x01010101)。通常只用于初始化为0或-1。4. realloc原型void* realloc(void* ptr, size_t size);作用调整已分配内存块的大小扩大或缩小。返回值返回新内存块的指针地址可能改变。机制原地扩容如果原空间后面有足够的空闲空间直接扩大。搬家扩容如果原空间不够会分配一块新的大内存将旧数据拷贝过去释放旧内存返回新地址。类比搬家换大房子。房东系统帮你把旧家具数据搬到新房子然后退掉旧房子。代码示例realloc 扩容1// 假设 arr 是 malloc 分配的 2int* newArr (int*)realloc(arr, 10 * sizeof(int)); 3if (newArr ! NULL) { 4 arr newArr; // 更新指针 5 // 现在可以使用 arr[5] 到 arr[9] 6}三、综合案例动态数组 (Dynamic Array)这是一个模拟 Cstd::vector的简易实现展示了动态内存的增删改查 (CRUD) 和自动扩容机制。1. 数据结构设计1typedef struct { 2 int* data; // 指向堆内存的指针 3 int size; // 当前元素个数 4 int capacity; // 当前最大容量 5} DynamicArray; 6 7 8x2. 核心功能实现创建与销毁createDynamicArray(int cap)分配结构体和初始数组内存。freeArray(DynamicArray* arr)先free(arr-data)再free(arr)。自动扩容 (expandCapacity)当size capacity时触发。使用realloc将容量翻倍 (capacity * 2)。更新data指针和capacity。尾插法 (append)检查是否需要扩容。data[size] value然后size。指定位置插入 (insertAt)检查索引合法性。检查是否需要扩容。数据搬移从后往前将index及之后的元素向后移动一位。插入新值size。删除元素 (deleteAt)保存被删除的值。数据搬移从前往后将index之后的元素向前覆盖。size--。3. 业务逻辑流程图 (Mermaid)graph TDA[开始: append(arr, value)] -- B{数组已满?}B -- 是 -- C[调用 expandCapacity]C -- D{扩容成功?}D -- 否 -- E[返回失败]D -- 是 -- F[写入数据]B -- 否 -- FF -- G[size]G -- H[结束: 返回成功]四、工程化实战AI 赋能的学生管理系统本节介绍了如何利用 AI 辅助进行企业级软件开发从需求分析到技术设计的完整流程。1. 需求分析阶段 (SRS)目标明确“做什么”。SMART 原则Specific(具体的)开发学生管理系统。Measurable(可衡量的)支持 1000 名学生。Achievable(可实现的)C语言 动态数组。Relevant(相关的)解决教务管理痛点。Time-bound(有时限的)1天内完成。产出物《需求分析报告.md》包含功能列表、优先级、IPO分析。2. 系统设计阶段 (Technical Spec)目标明确“怎么做”。核心内容架构设计分层架构表现层、业务层、数据层。接口设计定义函数原型、参数、返回值、错误码。数据设计定义struct结构体。产出物《技术规格说明书.md》。3. AI 技能 (Skill) 的应用需求分析 Skill根据自然语言描述自动生成 SRS 文档。技术设计 Skill读取 SRS生成 Technical Spec包含 Mermaid 架构图和接口定义。开发流程用户输入需求 - AI 生成 SRS。用户确认 SRS - AI 生成 Technical Spec。程序员根据 Spec 编码。4. 模块化设计示例主程序模块 (main.c)负责菜单显示、用户交互。学生管理模块 (student_manager.c)负责 CRUD 逻辑、动态数组管理。工具模块 (utils.c)负责输入验证、字符串处理。五、核心知识点速记卡知识点关键总结malloc分配内存不初始化返回void*失败返回NULL。calloc分配内存自动清零参数是 (数量, 大小)。realloc调整内存大小可能移动地址失败返回NULL(原内存不变)。free释放内存必须配对使用释放后置NULL防野指针。内存泄漏malloc了但没free导致内存一直被占用。野指针指针指向的内存已被释放但指针未置空。SRS需求规格说明书解决“做什么”的问题。Technical Spec技术规格说明书解决“怎么做”的问题架构、接口、数据。学习建议检查 NULL每次malloc/calloc/realloc后必须检查返回值是否为NULL。配对原则malloc和free必须成对出现确保没有内存泄漏。理解 reallocrealloc返回的新地址可能与旧地址不同务必用新地址更新指针。避免野指针free(p)后立即执行p NULL。工程思维学习使用 SRS 和 Technical Spec 规范开发流程这是从“写代码”到“做工程”的跨越。

相关新闻

2026/8/21 10:14:38

帧同步与状态同步的复盘记录怎样使用

帧同步与状态同步的复盘记录怎样使用 这篇只讨论 网络同步链路 的一个可验证切面。输入是输入帧、帧号、权威状态、协议版本和重连信息;输出要能被下游检查。范围写清楚,后面的取舍才有依据。 先留出边界 复盘先还原事实链:输入是什么、系统做…

2026/8/21 10:14:38

依赖环境的稳定构建

依赖环境的稳定构建 在构建面向家庭或个人的 AI 服务后端时,我们经常要与不稳定的大模型 API 和网络连接打交道。为了应对偶发的网络超时或 503 错峰,开发者很自然地会在 Python 后端加上重试机制(Retry Logic)。 然而在生产环境中…

2026/8/21 11:41:29

LTspice电路仿真全流程指南:从入门到精通

在电源设计、模拟电路调试以及信号完整性分析中,仿真是一个绕不开的环节。它能让我们在投入实际硬件成本前,验证电路设计的可行性,观察关键节点的波形,排查潜在问题。然而,对于许多刚接触电路仿真的工程师或学生来说&a…

2026/8/21 11:41:29

生产级Agent(17):身份与委托权限

文章摘要 前十六篇已经把生产级 Agent 从任务规划、Tool Calling、Memory、Checkpoint、Human-in-the-Loop、多 Agent 协作、安全沙箱、质量门禁、Control Plane 一直推进到 Agent Registry 与 Capability Marketplace。到这一阶段,平台已经能回答“有哪些 Agent”“…

2026/8/21 11:41:29

【嵌入式】STM32H743, D-cache, DMA注意事项

1. 问题 STM32H743开启D-cache以后,如果使用DMA会导致数据错乱。 2. 原因 DMA访问的是RAM, 实际的数据可能还在D-cache中,没有与RAM同步。 3. 解决方法 3.1 使用前同步 DMA发送前将cache中的数据写会RAM SCB_CleanDCache_by_Addr()DMA接收数据后&#xf…

2026/8/21 11:41:29

基于Claude API与GitHub Actions构建AI自动化内容发布系统

1. 这篇文章真正要解决的问题 你是否想过,一个每天更新的、内容丰富的在线报纸,其背后可能没有编辑团队,甚至不需要人工干预?这听起来像是未来新闻业的幻想,但今天,一个名为“Dissecting the automation of…

2026/8/21 11:41:29

Havenlon | 杂谈:AI 时代,谁拥有让事情发生的权力?

过去二十年,软件安全最习惯问的问题是:谁有权限?谁能登录,谁能审批,谁能调用接口,谁能修改配置,谁能拿到管理员账号。整个权限体系因此越来越复杂,RBAC、ABAC、多因素认证、多签、审…

2026/8/21 11:36:24

Spring Boot+Vue在线考试系统全栈开发实战:从架构设计到部署上线

在线考试系统是高校、培训机构和企业内部考核的常见需求,一个功能完整、流程清晰、技术栈主流的系统是计算机相关专业毕业设计的优秀选题。它要求开发者不仅要掌握前后端分离的开发模式,还要处理复杂的业务逻辑,如用户角色管理、试卷生成、实…

2026/8/20 10:17:13

工业通信系统底层逻辑:04 反射——高频能量撞墙之后会发生什么?

第四篇:反射——高频能量撞墙之后会发生什么? —— 你以为信号已经过去了,其实它正在回来打你 老Q的现场笔记 第五季,我们正式进入工业神经系统层。这里不再是单个设备的战斗,而是整个工厂“经脉”层面的秩序之战。从这一篇开始,你将第一次看清:看似简单的信号传播,背…

2026/8/20 20:11:18

工业传感器与变送器详解:序章 从物理世界到工业数据

序章 从物理世界到工业数据 ——重新认识工业传感器与变送器 工业自动化系统正变得日益复杂。今天的工业现场早已不是简单的控制回路,而是由多层技术共同构成的立体体系:PLC、DCS、SCADA、MES、工业互联网、边缘计算与人工智能。控制系统可以执行复杂算法,工业网络可以实现…

2026/8/21 0:03:13

Linux命令-uucico(UUCP传输程序)

Linux命令-uucico(UUCP传输程序) 🔰简介UUCP 体系简介 📖语法⚙️选项配置文件 💡示例示例 1:基本传输操作示例 2:主模式与从模式示例 3:调试与故障排查示例 4:UUCP 配置…

2026/8/21 0:03:13

Linux命令-uupick(UUCP文件接收工具)

Linux命令-uupick(UUCP文件接收工具)🔰简介uupick 在 UUCP 传输链中的位置📖语法⚙️选项交互命令💡示例示例 1:基本接收操作示例 2:仅处理来自特定系统的文件示例 3:完整 UUCP 文件…

2026/8/20 8:35:23

实测才敢推 AI论文网站 2026最新测评与推荐

2026年真正好用的AI论文网站,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。一、综…

2026/8/20 9:15:29

2026必备!AI论文网站测评:最新推荐与深度对比

2026年真正好用的AI论文网站,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。 一、…

2026/8/21 0:31:27

摆脱论文困扰!盘点2026年全网爆红的的AI论文写作工具

一天写完毕业论文在2026年已不再是天方夜谭。2026年最炸裂、实测能大幅提速的AI论文写作工具,覆盖选题构思、文献整理、内容生成、格式排版等核心场景,真正帮你高效搞定论文难题。 一、全流程王者:一站式搞定论文全链路(一天定稿首…