You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

查找数组中两个非重复数字的代码未触发Java式数组越界错误咨询

为什么C++的vector越界访问不会抛出类似Java的ArrayIndexOutOfBounds错误

根本原因

  • C++标准库的std::vector设计遵循零开销原则,[]下标运算符默认不会做边界检查,越界访问属于未定义行为,不会主动抛出异常。
  • 越界后的运行结果完全由内存状态决定:如果访问的地址恰好是程序合法可访问的内存区域,程序会继续运行,只是可能读到脏数据;如果访问到不可访问的内存页,才会触发段错误导致程序终止。
  • 如果需要主动做边界检查,可以使用std::vector的at()方法访问元素,该方法会在越界时抛出std::out_of_range异常,和Java的数组越界异常行为一致。

你提供的代码存在明确越界风险

当循环变量i等于nums.size()-1时,循环判断条件i < nums.size()仍然成立,此时访问nums[i+1]等价于访问nums[nums.size()],属于标准的越界访问,只是C++不会主动抛出异常而已,该逻辑漏洞需要修复,你可以补充边界判断:

for(int i = 0; i < nums.size(); i++) {
    if(i + 1 < nums.size() && nums[i] == nums[i+1])
        i++;
    else            
        ret.push_back(nums[i]);        
}

内容的提问来源于stack exchange,提问作者Anil Joshi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 22:54:02