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

求助排查Array index is out of range错误:多维数组索引越界问题

搞定你的数组越界问题

兄弟,我一眼就看到问题出在哪了——咱们先把数组的基础逻辑理清楚:你定义的 string[,] table = new string[104, 6]; 是一个104行、6列的二维数组,C#里数组索引从0开始,所以列的合法索引范围是0到5,行是0到103。

再看你报错的那段代码:

if (moveRow > 1) {
    firstTableCol += 1;
    secondTableCol += 1;
    thirdTableCol += 1;
    fourthTableCol += 1;
    string d1 = table[firstTableRow, firstTableCol]; // 这里炸了
    // ... 其他代码
}

你的firstTableCol初始值是1,每次进这个分支就加1,但完全没做边界检查啊!当它加到6的时候,就超过了列的最大合法索引5,这时候访问table[...,6]可不就触发Array index is out of range了嘛。

另外我还发现一个容易踩坑的地方:你外层循环写的是for(int col = 0; col < table.GetLength(0); col++),但table.GetLength(0)拿的是数组的行数(104),如果这个循环是用来遍历列的,那应该用table.GetLength(1)(列数6),不然moveCol最后会加到104,超过行的最大索引103,迟早也会出问题。

给你几个修复方向:

  • 给列索引的增加加个边界判断,确保不会超范围:
    if (moveRow > 1) {
        // 先检查加1后会不会越界
        if (firstTableCol + 1 >= table.GetLength(1)) {
            // 这里根据你的业务逻辑处理,比如重置索引或者终止循环
            break;
        }
        firstTableCol += 1;
        secondTableCol += 1;
        thirdTableCol += 1;
        fourthTableCol += 1;
        string d1 = table[firstTableRow, firstTableCol];
        // ... 其他代码
    }
    
  • 把外层循环的维度判断改对,要是遍历列就用table.GetLength(1),变量名也尽量对应上(比如遍历行就叫row,列叫col),避免自己搞混。
  • 以后写数组访问的时候,最好都加个索引合法性检查,或者用更安全的方式,提前把越界问题扼杀在摇篮里。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 06:42:15