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

C++运行报Debug Assertion Fail(vector下标越界)错误求排查

错误根因定位

你遇到的越界错误并非来自result容器,而是来自对b容器的非法访问,你认为a[i]、b[j]无越界是误判,问题出在以下代码的执行顺序:

if (a[i] + b[j] >= check) {
    j++; plate2++;
    result.push_back(make_pair(a[i], b[j]));
}

执行逻辑拆解:

  • 进入分支前你通过if (j > b.size() - 1) { break; }保证了此时j是合法下标
  • 但你先执行了j++操作,再访问b[j]:如果进入分支时j已经是b的最后一个合法下标(值为b.size()-1),j++后j的值就等于b.size(),超出了vector下标合法范围(vector合法下标区间为[0, size()-1]),直接触发越界断言。

删除result.push_back行后错误消失的原因:删除该行后你即使执行了j++,也没有再访问b[j],不会触发越界访问的检测逻辑,因此不会报错。

修复方案

调整j++的执行顺序,放在访问b[j]之后即可:

if (a[i] + b[j] >= check) {
    plate2++;
    result.push_back(make_pair(a[i], b[j]));
    j++; // 完成元素访问后再自增下标
}
额外注意事项

你代码中input函数的形参n为int类型,但main函数中传入的n、m是long类型,当输入的数组长度超过int取值范围时会发生截断,建议将input函数的形参n改为long类型规避潜在风险。

内容的提问来源于stack exchange,提问作者Thanh Minh Lê

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 12:54:04