You need to enable JavaScript to run this app. C++代码运行报第12行out of bounds错误 求排查数组越界Bug
优惠活动
大模型
产品
解决方案
定价
更多

C++代码运行报第12行out of bounds错误 求排查数组越界Bug

越界问题定位

你遇到的out of bounds错误,本质是C++动态数组的索引规则误用,和输入n=60没有直接因果关系——哪怕你输入更小的n值,只要按现有逻辑访问,内存越界是必然存在的;只是当访问到的内存区域被运行时校验器标记为非法时,才会抛出明确的越界报错。

核心错误拆解

  • 通过new申请长度为n的动态数组时,合法可访问的下标范围是固定的:0 ~ n-1,不存在下标等于n的数组元素。比如你输入n=60时,new int[60]申请的内存只能安全访问team[0]到team[59],一旦访问team[60]就是越界。
  • 你编写的循环逻辑for(i=1;i<=n;i++)本身和数组的合法索引范围完全不匹配:
    • 循环从i=1开始,直接跳过了数组首元素(下标0),相当于白白浪费了申请到的第一个内存位置
    • 循环终止条件设置为i<=n,i会一直自增到和n相等的位置,此时对team[i]、arr[i]的访问已经踩到了数组边界外的内存,直接触发越界错误。

修正代码示例

只需要把循环的起止条件调整为匹配数组的合法索引范围即可,不需要改动其他内存申请逻辑:

// 替换原有循环块
for(i=0;i<n;i++)
{
    cin>>team[i];
    cout<<team[i]<<" ";
    arr[i] = team[i];
}

其他需要注意的问题

  • 动态申请的堆内存需要主动释放,当前代码没有补充delete[] team; delete[] arr;的释放逻辑,存在内存泄漏问题。
  • 原循环执行完毕后,i的最终值是n+1,最后输出的换行+i的逻辑和预期不符,调整循环边界后i的最终值会和输入的n相等。

内容的提问来源于stack exchange,提问作者Afif Al'Hasnain

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.27 05:54:03