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
相关产品推荐
相关产品推荐

