2

嗨,我刚刚对我的代码进行了静态代码分析,但我不断收到错误消息

“没有溢出检查的整数运算”

有人可以帮我解决这个问题或告诉我它的确切含义。我已经尝试使用 check 关键字来解决这个问题,但是当我运行代码时它仍然出现。

List<String> emailList = new List<string>();

if (tbRecipients.Text.Contains(','))
{
    string[] splits = tbRecipients.Text.Split(',');

    for (int i = 0; i < splits.Length; i++)
    {
        if (splits[i].Contains(';'))
        {
            emailList.AddRange(splits[i].Split(';').ToList());
        }
        else
        {
            emailList.Add(splits[i]);
        }
    }
}

ASPX

<asp:TextBox ID="tbRecipients"  runat="server"  ></asp:TextBox>  
4

2 回答 2

3

您收到的消息说您可能会在 an 上获得“溢出” int,这是因为ints in C#are32 bit所以您只能在其中存储低于 的数字2^31。因此,VCG告诉您,在执行多个操作i++时,您最终可能i = 2^31会出现溢出int并产生意外代码行为的结果。

这只会发生在您的代码中,splitted.Length == int.MaxValue因为 sincesplitted是一个数组并且Length属性是int,所以当您获得i == int.MaxLength循环时,将评估i == splitted.Length并将转到i++哪个会溢出。

但是,您的循环说i < splitted.Length这样i == splitted.Length 就不会发生。

底线:我认为VCG发现了一条可疑线,但没有什么可担心的。
希望这会有所帮助,快乐的编码。

于 2016-06-08T19:30:58.053 回答
2

我已经尝试使用检查关键字来解决这个问题

第一步是理解信息。进行随机代码更改不是处理报告给您的可能错误的好方法。

在这里,没有可能的整数溢出。如果没有有关该工具的详细信息,很难说更多。

于 2016-06-08T18:59:39.797 回答