加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

-fcatch-undefined-behavior仅捕获超过大小1个元素的本地数组访

发布时间:2020-12-16 07:01:53 所属栏目:百科 来源:网络整理
导读:我有一个关于clang中catch-undefined-behavior标志的问题. 我在一个用C编写的大项目中尝试过,在一个点上,用户提供的整数值(i)到达.然后我添加了以下代码: int arr[3]arr[i] = 1234; 但是当我用gdb运行代码时,它只在变量i的值为4或更大时停止.因此,当我将值3
我有一个关于clang中catch-undefined-behavior标志的问题.
我在一个用C编写的大项目中尝试过,在一个点上,用户提供的整数值(i)到达.然后我添加了以下代码:

int arr[3]
arr[i] = 1234;

但是当我用gdb运行代码时,它只在变量i的值为4或更大时停止.因此,当我将值3传递给i时,它仍会在不停止的情况下访问其边界之外的数组.

这是-fcatch-undefined-behavior的已知限制吗?
或者它只检查访问是否在堆栈框架之外,而不是在本地数组之外?

最好的祝福
基督教

P.S.:我使用clang llvm 3.0作为编译器/链接器.目标是x86.该程序在Windows XP盒子上的xubuntu 12.04虚拟机内运行.

解决方法

ISO C标准的附录J列出了与您的问题相关的以下未定义行为:

>将指针加到或减去数组对象和数组对象
整数类型产生的结果不会指向同一个数组,或者只是指向同一个数组
对象(6.5.6).
>将指针加到或减去数组对象和数组对象
整数类型产生的结果指向数组对象之外并用作
被评估的一元*运算符的操作数(6.5.6).

根据你的帖子,Clang的-fcatch-undefined-behavior似乎只能抓住这两个中的第一个.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读