求助排查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
相关产品推荐
相关产品推荐

