【问题标题】:RangeAnalysis and V3022范围分析和 V3022
【发布时间】:2017-12-13 22:15:21
【问题描述】:

考虑下面的代码:

for (var i = int.MaxValue - 2; i < int.MaxValue; i++)
{
    Console.WriteLine(i);
}
Console.WriteLine();

for (var i = int.MaxValue - 2; i <= int.MaxValue - 1; i++)
{
    Console.WriteLine(i);
}
Console.WriteLine();

for (var i = int.MaxValue - 2; i <= int.MaxValue; i++)
{
    Console.WriteLine(i);
}

预计前两个循环只打印第三和第二大整数。 最后一个循环有一个错误,i 会溢出到int.MinValue 并导致无限循环。

运行它会给出预期的输出。

2147483645
2147483646

2147483645
2147483646

2147483645
2147483646
...

PVS Studio 发出三个警告:

V3022 表达式 'i

V3022 表达式 'i

V3022 表达式 'i

最后一个循环中的错误被正确报告,但前两个警告是误报。

【问题讨论】:

  • 感谢您的反馈。我们很快就会看到这个误报。

标签: pvs-studio


【解决方案1】:

我们已修复此误报。该修复程序将在下一个版本中提供。

【讨论】:

  • 只是让你知道,这仍然会触发uint i = 0; do { ++i; } while (i != uint.MaxValue);
猜你喜欢
  • 1970-01-01
  • 2019-01-20
  • 2014-06-02
  • 2020-04-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-24
相关资源
最近更新 更多