即使有请求,为什么 gcc 也不抱怨数组边界?

2024-03-27

我正在使用 gcc 4.9.0,我希望看到编译器警告我超出数组范围。如果我编译这个

int main()
{
    int table[5]={0};
    table[8] = 1234;
    int x = table[10];
}

使用 g++ -O2 -Wall main.cpp -o main.exe 我只收到有关未使用的 x 的警告:

main.cpp: In function 'int main()':
main.cpp:8:7: warning: unused variable 'x' [-Wunused-variable]
int x = table[10];
   ^

来自 gcc 文档 (https://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html#Warning-Options https://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html#Warning-Options)我看到 -O2 与 -Wall 一起应该启用 -Warray-bounds=1 检查。如果我尝试添加 -Warray-bounds ,事情不会改变。事实上,编译器甚至无法识别 -Warray-bounds=1:

g++: error: unrecognized command line option '-Warray-bounds=1'

现在,为什么编译器不给出任何有关错误写入/读取数组的警告?为什么编译器不能识别“-Warray-bounds=1”?


我怀疑缺少警告是因为优化。编译器很容易看出您编写的任何行都不会影响程序的行为,因此可能选择简单地跳过这些行。

看起来检查已知越界访问的编译时间的阶段恰好是在删除未使用的代码之后执行的,因此 GCC 从未发现您的错误。

防止这种优化的一个简单方法是声明数组volatile。任何写入或读取volatile对象必须被编译器视为副作用,因此无法优化掉。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

即使有请求,为什么 gcc 也不抱怨数组边界? 的相关文章

  • 具有不同大小结构的结构数组的 malloc()

    如果每个结构都包含一个大小不同的字符串数组 那么如何正确地 malloc 一个结构数组 因此每个结构可能有不同的大小 并且不可能 realloc 结构体数量 sizeof 结构体名称 after malloc 初始大小 sizeof 结构名
  • 通过增加索引之和来生成排序组合的有效方法

    对于启发式算法 我需要一个接一个地评估特定集合的组合 直到达到停止标准 由于它们很多 目前我正在使用以下内存高效迭代器块生成它们 受到 python 的启发 itertools combinations http docs python o
  • 如何使用 zlib 制作 .zip 文件

    我正在阅读zlib的文档 它相当详细 但我读到了这一行 输出数据将位于zlib格式 与 gzip 或zip formats http www zlib net zlib how html http www zlib net zlib how
  • ASP.NET Core 与现有的 IoC 容器和环境?

    我想运行ASP NET 核心网络堆栈以及MVC在已托管现有应用程序的 Windows 服务环境中 以便为其提供前端 该应用程序使用 Autofac 来处理 DI 问题 这很好 因为它已经有一个扩展Microsoft Extensions D
  • 为什么Apache MPM prefork.c 使用互斥体来保护accept()?

    我坐下来读书Apache 的 MPM prefork c http code metager de source xref apache httpd server mpm prefork prefork c这段代码使用了一个名为accept
  • 如何尝试/捕获所有异常

    我正在完成由其他人启动的 UWP 应用程序 该应用程序经常崩溃 我总是陷入困境应用程序 at if global System Diagnostics Debugger IsAttached global System Diagnostic
  • C# 正则表达式用于查找 中具有特定结尾的链接

    我需要一个正则表达式模式来查找字符串 带有 HTML 代码 中的链接 以获取文件结尾如 gif 或 png 的链接 示例字符串 a href site com folder picture png target blank picture
  • 将字符串转换为正确的 URI 格式?

    有没有简单的方法可以将电子邮件地址字符串转换为正确的 URI 格式 Input http mywebsite com validate email 3DE4ED727750215D957F8A1E4B117C38E7250C33 email
  • 劫持系统调用

    我正在编写一个内核模块 我需要劫持 包装一些系统调用 我正在暴力破解 sys call table 地址 并使用 cr0 来禁用 启用页面保护 到目前为止一切顺利 一旦完成 我将公开整个代码 因此如果有人愿意 我可以更新这个问题 无论如何
  • TcpClient 在异步读取期间断开连接

    我有几个关于完成 tcp 连接的问题 客户端使用 Tcp 连接到我的服务器 在接受客户端后listener BeginAcceptTcpClient ConnectionEstabilishedCallback null 我开始阅读netw
  • 两种类型的回发事件

    1 我发现了两篇文章 每篇文章对两种类型的回发事件的分类都略有不同 一位资源说两种类型的回发事件是Changed事件 其中控件实现 IPostbackDataHandler 当数据在回发之间更改时触发 然后Raised事件 其中控件实现 I
  • 2D morton 码编码/解码 64 位

    如何将给定 x y 的莫顿代码 z 顺序 编码 解码为 32 位无符号整数 生成 64 位莫顿代码 反之亦然 我确实有 xy2d 和 d2xy 但仅适用于 16 位宽的坐标 产生 32 位莫顿数 在网上查了很多 但没有找到 请帮忙 如果您可
  • 使用 WF 的多线程应用程序的错误处理模式?

    我正在写一个又长又详细的问题 但只是放弃了它 转而选择一个更简单的问题 但我在这里找不到答案 应用程序简要说明 我有一个 WPF 应用程序 它生成多个线程 每个线程执行自己的 WF 处理线程和 WF 中的错误 允许用户从 GUI 端进行交互
  • 默认析构函数做了多少事情

    C 类中的默认析构函数是否会自动删除代码中未显式分配的成员 例如 class C public C int arr 100 int main void C myC new C delete myC return 0 删除 myC 会自动释放
  • .NET 客户端中 Google 表格中的条件格式请求

    我知道如何在 Google Sheets API 中对值和其他格式进行批量电子表格更新请求 但条件格式似乎有所不同 我已正确设置请求 AddConditionalFormatRuleRequest formatRequest new Add
  • WPF。如何从另一个窗口隐藏/显示主窗口

    我有两个窗口 MainWindow 和 Login 显示登录的按钮位于主窗口 this Hide Login li new Login li Show 登录窗口上有一个检查密码的按钮 如果密码正确 我如何显示主窗口 将参数传递给 MainW
  • DataTable:通过 LINQ 或 LAMBDA 进行动态 Group By 表达式

    我有一个数据表 我想在其中对未指定数量的字段进行分组 发生这种情况的原因是用户可以选择他想要分组的字段 所以 实际上 我将选择推入列表中 在这个选择上 我必须对我的数据表进行分组 想象一下这段代码 VB 或 C 都一样 public voi
  • 初始化 LPCTSTR /LPCWSTR [重复]

    这个问题在这里已经有答案了 我很难理解并使其正常工作 基本上归结为我无法成功初始化这种类型的变量 它需要有说的内容7 2E25DC9D 0 USB003 有人可以解释 展示这种类型的正确初始化和类似的值吗 我已查看此站点上的所有帮助 将项目
  • C++、三元运算符、std::cout

    如何使用 C 用三元运算符编写以下条件 int condition1 condition2 condition3 int double result int or double std cout lt lt condition1 resul
  • 在 Xamarin 中获取 OutOfMemoryException

    java lang OutOfMemoryError 考虑增加 JavaMaximumHeapSize Java 执行时内存不足 java exe 我的 Visualstudio Xamarin 项目出现内存不足异常 请帮助我如何解决此问题

随机推荐

  • 在 PowerShell 中查询 LINQ 样式的列表

    add type Language CSharpVersion3 TypeDefinition public class pack code public pack code public string code get set publi
  • 对于不同的 arima 模拟组合,在 r 中获得第一个真实订单之前,如何计算 arima 订单不真实的次数

    大多数时候一个人跑步arima sim 函数来模拟特定的顺序arima mosel但是当人们通过检查此类模拟时间序列数据时auto arima 函数 它通常不会与 ARIMA 一个愿望和在arima sim 我想知道一个人可能需要跑多少次a
  • 内置函数str.lower()是如何实现的?

    我想知道 str lower 在 Python 中是如何实现的 所以我克隆了cpython https github com python cpython存储库并使用 grep 进行了一些搜索 经过几次跳跃之后unicode lower i
  • 分布式 Tensorflow:检查失败:大小>=0

    我正在使用 keras 2 0 6 Tensorflow的版本是1 3 0 我的代码可以在 theano 后端运行 但在张量流后端运行失败 F tensorflow core framework tensor shape cc 241 检查
  • 使用react-testing-library时无法找到带有文本的元素:“myText”错误

    我正在尝试使用react testing library使用 React 和 Jest 但我的一个测试失败了 我认为这与 regex 上的正则表达式有关className prop在测试文件上 下面我附上了各自的测试和组件文件 另外 有没有
  • 如何更改后退按钮上的文本

    默认情况下 后退按钮使用视图控制器的标题作为其上的文本 我可以在不更改视图控制器标题的情况下更改后退按钮上的文本吗 我需要这个 因为我有一个视图控制器 其标题太长而无法显示 在这种情况下 我想仅显示 后退 作为后退按钮的标题 我尝试了以下方
  • Graphite:用一个命令处理多个系列

    我想将两个系列放在石墨上的同一张图中仪表板 但是 由于仪表板需要单行命令 我找不到不涉及使用通配符的方法 这是我想要在同一张图中显示的两个系列的示例 sum base foo bar positive sum base foo bar ne
  • 自定义选择菜单对话框上的 jquery mobile 关闭按钮

    我正在尝试将 jqm 对话框上的关闭按钮更改为 X 以外的其他按钮 我不能为此使用 CSS 因为我不希望每次都应用它 所以我正在寻找一种使用 jquery 来实现此操作的方法 有问题的对话框是选择菜单 http api jquerymobi
  • @BeforeClass 注释:Junit 与 TestNG

    Why the BeforeClass中的方法JUnit is static而在TestNG its non static TestNG是作为改进而开发的JUnit 那么他们为什么选择这种实现方式呢 Since BeforeClass只运行
  • 检查查询字符串是否为 int 的最佳方法?

    我的一位同事想到的一个问题是 检查查询字符串是否为 int 的最佳方法是什么 我建议使用经典的 Int Parse 和 try and catch 还建议使用 TryParse 其实我也想不出其他的办法了 有任何想法吗 Int32 TryP
  • 使用 jQuery 编写 OO Javascript

    我来自 Prototype JS 背景 通过使用 OO Javascript 被鼓励Class create 现在我正在做一些 JQuery 工作 并且尝试编写一些结构正确的 JQuery 代码 例如 我可以从两个不同的单击事件处理程序调用
  • MySQL SUM 函数

    我了解 SQL sum 函数 这是我的代码
  • 无法对文档执行 querySelectorAll。怎么修?

    我在做什么 我有从 PHP 数组生成的链接 该数组生成它自己的唯一 ID 该 ID 应该指向它自己的模态 弹出窗口 div 该 div 具有与链接 ID 匹配的 ID 模态框也是使用 PHP 数组自动生成的 我收到这个错误 我对此非常陌生
  • REPLACE INTO 查询是好的做法吗?

    我需要一个 SQL 查询来更新或创建数据库条目 如果某个客户尚不存在 我在网上找到了目前的解决方案 command CommandText REPLACE INTO Resource Tracer dbo Customer Customer
  • 如何登录 OpenEdge Progress?

    我找到了在 Progress 4GL 中记录某些内容的不同方法 但没有一个令人满意 简单的MESSAGE语句的缺点是它对帧的处理非常糟糕 ON CHOOSE OF btn Q4 DO MESSAGE Line 1 MESSAGE Line
  • struts2 中的 JQuery Grid - 初学者

    我对 struts2 和 JQuery 编程很陌生 在我的应用程序中 当调用 loginAction 时 如果用户是管理员 我会将他们定向到 AdminLoadAction 此操作加载 adminHome jsp 我需要的是 adminHo
  • 有没有办法将--compressed传递到PHP的curl_setopt()中?

    使用curl时 我发现我所访问的服务器上的行为有所不同 具体取决于我是否通过 compressed作为一个论点或不 我已经将 Accept Encoding 标头设置为 gzip deflate sdch curl setopt ch CU
  • 使用 NSPredicate 搜索 NSFetchedResultsController

    我已经被这个问题困扰了一段时间 并已尽力找出解决方案 我正在使用 Core Data 而且对于 iOS 编码来说相对较新 我在如何搜索 fetchedResultsController 以过滤掉用户在 searchBar 中输入的字符串时遇
  • kubernetes 中的 PreStop 钩子永远不会被执行

    我正在尝试创建一个小 Pod 示例 其中包含两个通过 emptyDir 卷共享数据的容器 在第一个容器中 我等待了几秒钟 然后它就被销毁了 在 postStart 中 我正在将一个名为 started 的文件写入共享卷 在 preStop
  • 即使有请求,为什么 gcc 也不抱怨数组边界?

    我正在使用 gcc 4 9 0 我希望看到编译器警告我超出数组范围 如果我编译这个 int main int table 5 0 table 8 1234 int x table 10 使用 g O2 Wall main cpp o mai