2016-06-08 2 views
0

Salut, je viens de rencontrer une analyse de code statique sur mon code et je continue à obtenir l'erreurOpération Entier Sans débordement Vérifiez

« Opération entier sans débordement Check »

que quelqu'un peut me aider à résoudre ce ou dites-moi ce que cela signifie exactement. J'ai déjà essayé d'utiliser les mots-clés de vérification pour résoudre ce problème, mais il est toujours apparu lorsque j'ai exécuté le code.

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

Quel outil utilisez-vous pour effectuer l'analyse? Est-ce qu'il pointe sur une ligne en particulier ou seulement sur l'ensemble du bloc de code? – Luiso

+0

VCG et oui il pointe à cette ligne pour (int i = 0; i

Répondre

1

J'ai déjà essayé d'utiliser les mots-clés de contrôle pour résoudre ce problème

La première étape serait de comprendre le message. La modification du code aléatoire n'est pas une bonne façon de gérer les bogues qui vous sont signalés.

Ici, il n'y a pas de débordement d'entier possible. Difficile de dire plus sans détails sur l'outil.

1

Le message que vous avez dit que vous pourriez obtenir un « débordement » sur un int, c'est parce int s dans C# sont 32 bit de sorte que vous ne pouvez y entreposer des numéros inférieurs à 2^31. Donc VCG vous dire que tout en faisant plusieurs i++ vous pourriez vous retrouver avec un i = 2^31 qui déborderait votre int et engendrerait un comportement de code inattendu.

Cela ne pourrait se produire dans votre code dans le cas où splitted.Length == int.MaxValue depuis splitted est un tableau et la propriété Length est int, donc quand vous i == int.MaxLength la boucle évaluera i == splitted.Length et ira à i++ qui déborder.

Cependant votre boucle dit i < splitted.Length afin que i == splitted.Lengthne sera pas arriver.

Bottom line: Je pense que VCG a repéré une ligne suspecte, mais il n'y a rien à craindre.
Espérons que cela aide, codage heureux.