C++数组越界,VS不报错的问题

最近因为算法转码的工作,在转码的过程中多次遇到一个数组越界但在我的pc上运行不报错的bug,但是当把demo给到软件人员时,就碰到了这个问题,以至于在自己pc上调试时没有发现问题,所以记录下这个常见bug,虽然很low的错误,但也值得记录。

bug如下:

但其实很容易发现是由于当i=width-1时,data会取到data[-1]。

不报错的原因在于

  1. 数组作为更大内存区域的一部分:如果数组是某个较大内存分配的一部分,而该内存区域之前有有效的数据,那么访问 data[-1] 可能会意外地返回那个位置的数据,但这依然是未定义行为。

  2. 编译器优化:某些编译器在优化模式下可能对代码进行调整,有时候这种调整可能会掩盖了访问越界的问题,但这不改变访问是非法的本质。

  3. 硬件特性:某些硬件架构可能允许对内存的非合法地址访问而不立即引发错误,但这不是C++语言规范所保证的,且在不同的系统上表现可能不同。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Feis Book

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值