在C#中创建此方法后的IndexOutOfRangeException

时间:2016-04-06 02:25:36

标签: c#

在C#中创建此范围匹配方法后,我一直收到IndexOutOfRangeException。我真的不确定自己做错了什么。

private string RangeMatch(char lastnameLetter, char[] letterLimits, string[] times)
{
     string regTime;
     int index = letterLimits.Length - 1;

     while (index >= 0 && lastnameLetter < letterLimits[index])
            --index;

     regTime = times[index];
     return regTime;
}

1 个答案:

答案 0 :(得分:1)

您必须为数组索引指定非负数,整数,数字。

您在return之前的最后陈述:

regTime = times[index];
由于之前的while循环,

index值可能为-1

 while (index >= 0 && lastnameLetter < letterLimits[index])
        --index;

index >= 0lastnameLetter < letterLimits[index]到最后(完美匹配)时会发生这种情况。

return null index -1之前,在分配之前,一次修复将是times == null。您还可以将条件组合为返回null以及其他一些可能的错误(例如times.Length < index - 1private string RangeMatch(char lastnameLetter, char[] letterLimits, string[] times) { string regTime; int index = letterLimits.Length - 1; while (index >= 0 && lastnameLetter < letterLimits[index]) --index; if (index == -1 || times == null || times.Length < index - 1) //invalid cases return null; //return null regTime = times[index]; return regTime; }

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>


int main(int argc, char *argv[])
{
    //{"TYPE", "ID", "SCOPE", "VALUE"}
    char *symbol_table_variables[503][4];
    int scope = 0;
    int lower_bound_of_big_boy_counter = 0;
    sprintf (symbol_table_variables[lower_bound_of_big_boy_counter][2], "%d", scope);
    printf("symbol_table_variables[lower_bound_of_big_boy_counter][2] %s \n", 
    symbol_table_variables[lower_bound_of_big_boy_counter][2]);
    return 0;
}