2016-06-08 54 views
0

您好我只是跑在我的代码的静态代码分析,我不断收到错误整数运算无溢出检查

“整数运算无溢出检查”

有人可以帮助我解决这个或者告诉我究竟是什么意思。我已经尝试使用检查关键字来解决这个问题,但是当我运行代码时它仍然出现。

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> 
+0

你用什么工具进行分析?它是指向特定行还是仅指整行代码? – Luiso

+0

VCG和yes它指向这行(int i = 0;我

回答

1

我已经尝试使用支票的关键字来解决这个问题

的第一步是要了解该消息。更改随机代码并不是处理向您报告的可能错误的好方法。

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

1

你得到的消息说,你可以得到上int“溢出”,那是因为int S IN C#32 bit让你只能在它的数字比2^31下储存。所以VCG告诉你,虽然做了几个i++,你可能会得到一个i = 2^31这会溢出你的int并产生意想不到的代码行为。

这只能在你的代码中发生的情况下splitted.Length == int.MaxValue因为splitted阵列Length属性为int,所以当你得到i == int.MaxLength循环将评估i == splitted.Length,并会去i++这将溢出。

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

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