2016-06-08 17 views
0

Привет Я просто побежал статический анализ кода на моем коде, и я получаю ошибкуInteger Работа без перелива Проверить

«Integer Операция без перелива Проверить»

Может кто-то помочь мне решить эту проблему или скажите мне, что именно это означает. Я уже пытался использовать ключевые слова проверки, чтобы исправить это, но он все еще возникал, когда я запускал код.

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 и да, он указывает на эту строку для (int i = 0; i

ответ

1

Я уже пытался с помощью проверки ключевых слов, чтобы исправить эту

Первого шаг должен были бы понять сообщение. Выполнение случайных изменений кода это не очень хороший способ справиться с возможными ошибками, о которых сообщается вам.

Здесь нет возможного переполнения целых чисел. Трудно сказать больше без подробностей об инструменте.

1

сообщения вы получите говорит, что вы могли бы получить «переполнение», нанесенные на int, это потому, что int s в 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 обнаружил подозрительную линию, но беспокоиться не о чем.
Надеюсь, это поможет, счастливое кодирование.