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

c语言中的未定义行为

定义(未定义的 Undefined Behavior,UB)

未定义行为是指在 C 语言标准中,标准未对某种行为规定具体结果,因此编译器可以自由决定如何处理该行为。未定义行为的本质结果无法预测,即任何结果都可能发生

种类

  1. 访问越界内存
  2. 整型溢出(有符号整数)
  3. 未初始化的局部变量
  4. 修改并读取同一对象,且无序列点隔离
  5. 非法类型转换
  6. NULL 指针解引用
  7. 函数 return 时漏掉返回值

如何避免

  1. 开启编译器警告(如 -Wall-Wextra 等)
  2. 使用代码静态分析工具(如 clang-analyzercppcheck
  3. 遵守良好的编码规范,避免在同一表达式中对同一变量既读取又修改
  4. 严格初始化变量,尤其是指针和数组

补充

最容易忽视的未定义错误(修改并读取同一对象,且无序列点隔离)

C 标准规定:

在一次求值过程中,对同一对象的两次访问(其中至少一次是修改),且两者之间没有指定的求值顺序,结果是未定义行为。

a[i++] += a[i];

a[i++] += a[i] 中:

  • ia[i++] 中被读取和修改
  • ia[i] 中再次被读取
  • 两次访问 i 的顺序不确定,这正是 UB 的根源

http://www.kler.cn/a/583420.html

相关文章:

  • Python从基础开发到前沿技术完整生态(应用技术栈)(2025版)
  • 隐藏的git文件夹
  • Linux - 磁盘分区、挂载
  • Springboot redis bitMap实现用户签到以及统计,保姆级教程
  • MongoDB分页实现方式对比:PageRequest vs Skip/Limit
  • Ubuntu-配置apt国内源
  • 暴力破解Excel受保护的单元格密码
  • 数据批处理(队列方式)
  • QT系列教程(13) 事件系统
  • linux学习(十二)(联网(TCP/IP堆栈,子网掩码,以太网arp/rarp,DHCP,IP路由,DNS解析,网络过滤器,SSH公司,文件传输))
  • 在类似于Manus的项目中,我想使用python控制用户的浏览器,我应该选择selenium呢?还是playwright?
  • ubuntu22.04 关于挂在设备为nfts文件格式无法创建软连接的问题
  • 4-文件导入功能文档
  • 基于Redis实现限流
  • 蓝桥杯第三天:2023蓝桥杯省赛 第 1 题
  • Django系列教程(4)——实例项目任务管理小应用
  • 链上权益:基于区块链技术的数字版权管理革命
  • C#+AForge 实现视频录制
  • C#线程上异步执行(this.BeginInvoke)
  • 【CSS3】筑基篇