首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >“Ill-定义的for-循环循环无限执行”(MSVC C6295)

“Ill-定义的for-循环循环无限执行”(MSVC C6295)
EN

Stack Overflow用户
提问于 2020-06-28 15:47:39
回答 2查看 1.3K关注 0票数 2

我不太清楚为什么visual studio会给我错误消息“Ill-定义for -循环:'unsigned int‘值的范围总是'0’到'4294967295‘。循环对以下代码执行无限”:

代码语言:javascript
运行
复制
for (unsigned int i = list->GetCount() - 1; i >= 0; i--)
{
    // do stuff to each item (specifically in reverse order)
}

有人能给我解释一下吗?

编辑: GetCount()返回一个无符号int,我对此没有控制权

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-06-28 15:49:32

当您从unsigned类型中减去0时,您不会得到一个负数,而是一个非常大的正数。

这意味着这个条件:

代码语言:javascript
运行
复制
i >= 0

永远是真的,结果是一个无限的循环。

您可以通过执行以下操作来解决此问题:

代码语言:javascript
运行
复制
for (int i = static_cast<int>(list->GetCount()) - 1; i >= 0; i--)

注意,转换需要在减法1之前完成,否则当GetCount返回0时,您将遇到相同的包装问题。

票数 5
EN

Stack Overflow用户

发布于 2020-06-28 15:49:15

你犯了一个常见的错误。当您将i声明为unsigned int时,您保证它永远不会是负的;相反,每当它低于0时,它就会“包围”到一个非常高的数字。

这意味着您的for-循环永远不会终止!您的终止条件,i >= 0,将永远不会被满足,因为无符号整数将计数下降2,1,0,4294967295,4294967294.永远如此等等。

若要解决此问题,请将unsigned int类型更改为int类型。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62624816

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档