news 2026/9/3 6:42:11

C语言相关问题

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
C语言相关问题

1. 函数调用栈

main函数中调用foo, foo中调用bar.

遵循后进先出,栈向下生长,RBP指向当前栈帧的底部(高地址),RBP会随着函数栈的切换变化

2. 野指针/悬垂的成因与预防

空指针:指针值明确等于NULL

野指针:指针存随机垃圾地址;

悬垂指针:指针存曾经有效、但对象已经销毁的旧地址。

2.1 野指针

成因:未初始化

预防:指针定义时立刻初始化,不知道指向哪里就赋值NULL

2.2 悬垂指针

成因:指针本身保存曾经合法的地址,但是这个地址对应的内存对象已经被销毁(生命周期结束)

例如:

场景 1:返回局部栈变量的地址

场景 2:free()堆内存之后,指针没有置 NULL

场景 3:结构体 / 数组对象销毁,外部还保存它的成员地址

预防:

  1. 禁止返回局部栈变量的地址。需要返回,用 malloc 堆或者 static 变量。
  2. free(p)之后立刻手动赋值p = NULL;,把悬垂转为安全空指针

3. 串口丢失数据情况

问题本质:生产速度 > 消费速度,数据溢出丢失(数据过载)

  • 生产者:ISR 中断,硬件源源不断产生数据(串口收到字节、DMA 收到数据),产生数据很快。
  • 消费者:main 主循环,做协议解析、运算、打印,处理慢。

如果没有 RingBuffer:ISR 里面直接做解析处理。一旦处理慢,新的数据又来了,就会覆盖寄存器,丢失数据,还会拉长 ISR 执行时间,破坏系统实时性。

原因:中断来不及处理 → 中断丢失 / 覆盖(硬件层面)

UART 收到一个字节,硬件把字节放到 DR 寄存器,同时触发 RXNE 中断。 如果你 ISR 执行太慢,还没读完 DR,下一个字节又来了,新字节直接覆盖 DR 寄存器旧字节 →硬件丢字节

解决思路ISR 只干一件事:把字节搬走,存到内存缓冲区,立刻退出 ISR。硬件寄存器尽快腾空,不让新来的数据把它覆盖。这就是 RingBuffer 干的活。

解决方案:

DMA 硬件缓冲区 + 软件 RingBuffer(工程最常用)

  1. DMA 把数据填到硬件接收 buffer;半满 / 满触发一次中断。
  2. ISR 中把 DMA 这一批字节批量拷贝进软件 RingBuffer,立刻退出 ISR。
  3. main 循环从 RingBuffer 取出字节做协议解析业务。
  • DMA:减少中断次数,免除 CPU 单字节搬运。
  • RingBuffer:做流量削峰,抵抗瞬时突发数据。

就算 DMA,依然需要软件环形缓冲区做二级缓冲。DMA 的硬件缓冲区一般不大,不能当长期缓存。

4. 链表相关理解

每个节点是使用malloc分配的内存并获得其指针,通常是使用这个指针来进行操作。

链表头指针通常会遇到临界条件,需要单独考虑。

节点的构成:vlaue + 指向下块节点的指针。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/3 6:41:01

基于偏微分方程与MATLAB的图像去噪:从各向异性扩散原理到工程实践

简介:本资源是一套面向图像处理研究者与生物识别方向开发者的MATLAB实践代码包,聚焦于偏微分方程(PDE)在指静脉图像去噪中的工程实现,解决低信噪比静脉图像中噪声干扰导致特征提取失准的核心问题。压缩包共19个文件&am…

作者头像 李华
网站建设 2026/9/3 6:40:26

>数字化转型第二大困境:无标准可参照、权责利边界模糊、转型认知混乱。三大痛点叠加,导致企业数字化投入打水漂、项目烂尾、部门内耗。破解之道:自建内部标准、梳理权责矩阵、精准定位企业转型阶段——从“瞎摸索

数字化转型第二大困境:无标准可参照、权责利边界模糊、转型认知混乱。三大痛点叠加,导致企业数字化投入打水漂、项目烂尾、部门内耗。破解之道:自建内部标准、梳理权责矩阵、精准定位企业转型阶段——从"瞎摸索"到"有章法&quo…

作者头像 李华
网站建设 2026/9/3 6:39:20

基于SpringBoot的旅游行程分享与推荐小程序(源码+lw+部署文档+讲解等)

温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台…

作者头像 李华
网站建设 2026/9/3 6:37:56

OpenCut:开源视频剪辑工具,Rust驱动的高性能CapCut替代方案

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/3 6:37:27

四足机器人消防应急方案拆解:从热防护到水炮的工程链路

宇树展示四足机器人消防应急解决方案时,大多数人注意到的是一台机器狗被装上水炮、穿烟越障的画面。作为工程师,更需要拆解的是另一层问题:这类方案到底由哪些技术模块组成,进入真实火场之前,哪些环节最容易被演示视频…

作者头像 李华
网站建设 2026/9/3 6:37:18

Unity游戏源码深度解析:从解构到重构的实战指南

简介:本资源为基于Unity3D-4.3.4开发的《三国群英传》策略类游戏完整源代码工程,面向Unity初学者与游戏开发进阶学习者,聚焦3D战场表现、即时制战争逻辑与武将技能特效实现等核心难点。压缩包共14725个文件,涵盖4250张UI与角色贴图…

作者头像 李华