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

HackerRank平台C++代码段错误:访问letters数组触发程序崩溃排查

问题根因

代码存在数组越界访问问题,是运行报错的直接原因:

  • letters数组共初始化10个元素,有效下标范围为0~9,下标大于等于10时访问属于非法内存访问,会触发运行错误。
  • 代码中spaces变量逻辑完全冗余,计算下来永远满足spaces == n的条件:
    1. spaces初始值为a-1
    2. 循环中n从a开始每次递增1,每次循环spaces也同步加1,二者数值永远相等
  • 当输入的b大于9时,n会遍历到10及以上的数值,此时满足spaces ==n的判断,会执行cout << letters[n] << "\n";访问不存在的数组元素,触发报错。
  • 换成固定下标2或者打印固定字符串不会触发越界,因此运行正常。

修复方案

删除冗余的spaces变量,将判断条件改为判断n是否小于等于9即可,修复后代码如下:

int main() {
    int a;
    int b;
        
    string letters[] = {"", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine"};
    
    cin >> a >> b;   
    for (int n = a; n <= b; n++) {
        if (n <= 9) {
            cout << letters[n] << "\n";
        } 
        else if (n%2 == 0) {
            cout << "even\n";
        }
        else {
            cout << "odd\n";
        }
    }
    return 0;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.11 14:15:01