全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

c++中的未定义行为(UB)有哪些_c++常见Undefined Behavior汇总【安全编程】

未定义行为(UB)是C++标准完全不约束后果的行为,编译器可任意优化或生成错误代码;常见于数组/指针越界、解引用空/野/已释放指针等场景,极易引发安全漏洞。

未定义行为(Undefined Behavior,UB)不是“随机出错”,而是标准完全不管后果——编译器可以优化、忽略、崩溃、静默改值,甚至生成看似正常但实际错得离谱的代码。 它是C++中最危险也最容易被忽视的安全隐患,尤其在底层开发、嵌入式、安全敏感场景中,一个UB可能直接导致内存破坏、提权漏洞或逻辑失控。

访问越界:数组、指针、容器

超出合法索引范围读写,是UB最高发的来源之一:

  • int a[3] = {1,2,3}; a[5] = 42; —— 数组下标越界(即使没崩溃,也不保证安全)
  • int* p = new int[2]; p[3] = 0; —— new分配后越界写,UB,不触发std::bad_alloc
  • std::vector v{1,2}; v.at(5); —— at()会抛异常,但v[5]是UB(operator[]不检查)
  • char buf[10]; strcpy(buf, "hello world"); —— 缓冲区溢出,经典UB,也是栈溢出漏洞根源

解引用空/野/已释放指针

指针失效后继续使用,结果不可预测:

  • int* p = nullptr; *p = 1; —— 解引用空指针,UB(不是“一定段错误”,优化后可能被整个删掉)
  • int* p = new int(42); delete p; cout —— 使用已释放内存(dangling pointer),UB
  • int* p; cout —— 未初始化指针解引用,UB(哪怕只是读,也可能触发陷阱值)
  • int x = 10; int* p = &x; } /* x析构 */ cout —— 访问已离开作用域的局部对象,UB

有符号整数溢出与未定义运算

无符号整数溢出是定义良好的(自动回绕),但有符号整数溢出是UB:

  • int x = INT_MAX; x++; —— 有符号加法溢出,UB(编译器可假设它永不发生,进而删除相关分支)
  • int y = -1; y —— 左移导致符号位变化或溢出,UB(右移负数也是UB)
  • int a = 1, b = 0; a / b; —— 除零,UB(浮点除零是特殊值,整数除零是纯UB)
  • int x; cout —— 读取未初始化的非静态局部变量,UB(静态变量会零初始化,但自动存储期变量不会)

违反严格别名规则与类型双关

C++禁止用不兼容类型指针访问同一块内存(防止编译器优化失准):

  • float f = 3.14f; int* p = (int*)&f; cout —— C风格强制转换绕过类型系统,UB
  • union { int i; float f; } u; u.f = 3.14f; cout —— 在C++中(C++17前)读取非最后写入成员是UB;C++17起允许“活跃成员切换”,但仍有严格限制
  • char buf[sizeof(int)]; int* p = reinterpret_cast(buf); *p = 42; —— 未满足对齐要求或未正确构造对象,UB(需用placement new或std::bit_cast(C++20))

基本上就这些。UB不复杂,但容易忽略;它不总当场报错,却可能在优化后、换平台后、或攻击者精心构造输入时才爆发。用AddressSanitizer(ASan)、UndefinedBehaviorSanitizer(UBSan)、Clang-Tidy和静态分析工具主动捕获,比靠运气更可靠。


#   # c++  # 底层开发  # char  # int  # 指针  # operator  # 空指针  # delete  # undefined  # 也不  # 浮点  # 它是  # 能在  # 仍有  # 报错  # 它不  # 最容易  # 时才  # 极易 


相关文章: 建站主机选哪种环境更利于SEO优化?  免费制作小说封面的网站有哪些,怎么接网站批量的封面单?  免费视频制作网站,更新又快又好的免费电影网站?  网站专业制作公司,网站编辑是做什么的?好做吗?工作前景如何?  动图在线制作网站有哪些,滑动动图图集怎么做?  ,怎么用自己头像做动态表情包?  南京做网站制作公司,南京哈发网络有限公司,公司怎么样,做网页美工DIV+CSS待遇怎么样?  建站之星后台管理:高效配置与模板优化提升用户体验  已有域名能否直接搭建网站?  湖南网站制作公司,湖南上善若水科技有限公司做什么的?  企业网站制作公司网页,推荐几家专业的天津网站制作公司?  建站之星logo尺寸如何设置最合适?  c++ stringstream用法详解_c++字符串与数字转换利器  建站之星如何开启自定义404页面避免用户流失?  黑客如何利用漏洞与弱口令入侵网站服务器?  想学网站制作怎么学,建立一个网站要花费多少?  如何在阿里云高效完成企业建站全流程?  怎么将XML数据可视化 D3.js加载XML  官网网站制作腾讯审核要多久,联想路由器newifi官网  官网自助建站平台指南:在线制作、快速建站与模板选择全解析  定制建站是什么?如何实现个性化需求?  h5网站制作工具有哪些,h5页面制作工具有哪些?  如何高效配置香港服务器实现快速建站?  标准网站视频模板制作软件,现在有哪个网站的视频编辑素材最齐全的,背景音乐、音效等?  北京制作网站的公司排名,北京三快科技有限公司是做什么?北京三快科技?  建站之星后台管理如何实现高效配置?  如何在橙子建站上传落地页?操作指南详解  成都网站制作报价公司,成都工业用气开户费用?  linux top下的 minerd 木马清除方法  MySQL查询结果复制到新表的方法(更新、插入)  如何在万网自助建站平台快速创建网站?  建站之星官网登录失败?如何快速解决?  css网站制作参考文献有哪些,易聊怎么注册?  如何用PHP工具快速搭建高效网站?  如何快速上传自定义模板至建站之星?  免费公司网站制作软件,如何申请免费主页空间做自己的网站?  最好的网站制作公司,网购哪个网站口碑最好,推荐几个?谢谢?  网站广告牌制作方法,街上的广告牌,横幅,用PS还是其他软件做的?  微信小程序 五星评分(包括半颗星评分)实例代码  杭州银行网站设计制作流程,杭州银行怎么开通认证方式?  网站代码制作软件有哪些,如何生成自己网站的代码?  手机钓鱼网站怎么制作视频,怎样拦截钓鱼网站。怎么办?  宝盒自助建站智能生成技巧:SEO优化与关键词设置指南  制作电商网页,电商供应链怎么做?  如何通过西部建站助手安装IIS服务器?  存储型VPS适合搭建中小型网站吗?  高防网站服务器:DDoS防御与BGP线路的AI智能防护方案  C++如何将C风格字符串(char*)转换为std::string?(代码示例)  视频网站app制作软件,有什么好的视频聊天网站或者软件?  如何在VPS电脑上快速搭建网站? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。