x.size()
returns an unsigned value. If this is smaller than 2
then the value will underflow and the result will become very large.
On the other hand since i
is a signed type hen it will sooner or later come to the max value of an int
(which will still be less than the result of x.size() - 2
), and then i++
will lead to arithmetic overflow which is undefined behavior.
Before you attempt this loop you must make sure that x.size() >= 2
, and you need to make sure that the counter variable is an unsigned type (like size_t
):
if (x.size() >= 2)
{
for (size_t i = 0; i < x.size() - 2; ++i)
{
// ...
}
}
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…