Visual Studio “错误定义的for-loop - loop无限执行”(MSVC C6295)

nom7f22z  于 2023-06-24  发布在  其他
关注(0)|答案(3)|浏览(319)

我不太确定为什么Visual Studio会给我错误消息“错误定义的for循环:“unsigned int”值的范围始终为“0”到“4294967295”。循环无限执行”的代码:

for (unsigned int i = list->GetCount() - 1; i >= 0; i--)
{
    // do stuff to each item (specifically in reverse order)
}

有人能给我解释一下吗
Edit:GetCount()返回一个unsigned int,我对此没有控制权

00jrzges

00jrzges1#

当你从unsigned类型中减去0时,你得到的不是负数,而是一个非常大的正数。
这意味着这个条件:

i >= 0

将始终为真,导致无限循环。
您可以通过执行以下操作来解决此问题:

for (int i = static_cast<int>(list->GetCount()) - 1; i >= 0; i--)

请注意,强制转换需要在减去1之前 * 完成,否则当GetCount返回0时,您将遇到相同的 Package 问题。

bwleehnv

bwleehnv2#

你犯了一个常见的错误。当你声明iunsigned int时,你保证它永远不会为负;相反,每当它低于0时,它将“回绕”到一个极高的数字。
这意味着你的for循环永远不会终止!您的终止条件i >= 0将 * 永远不会 * 满足,因为无符号整数将倒数2,1,0,4294967295,4294967294...以此类推
要解决此问题,请将unsigned int类型更改为int类型。

i86rm4rw

i86rm4rw3#

you're循环的执行永远不会结束。
有几个解决方案,我喜欢前两个。第三个将导致list->GetCount()被调用n次。
int i = list->getCount()- 1; i!= UINT_MAX;--i);
int i = list->getCount()- 1; i!=(unsigned int)-1;--i);
int i = list->getCount()- 1; i <= list->GetCount()- 1;--i);
你也可以转换为int,但是你必须确定list->GetCount()将小于或等于INT_MAX。

相关问题