注意到我正在处理的其中一个程序中的错误,提取代码,基本上就是这个。
它与signed int进行无符号比较,并导致无限循环:
#include <iostream>
int main()
{
unsigned int i = 0;
while (i < 1000000)
{
printf("%o\n", i);
++i;
}
return 0;
}
我尝试使用此代码:
#include <iostream>
int main()
{
unsigned int i = 0;
while (i < 1000000u)
{
printf("%o\n", i);
++i;
}
return 0;
}
我认为这会修复签名/未签名的比较,而且它还没有,它仍然会遇到无限循环。所以我也尝试将它转换为unsigned int,没有骰子,仍然是无限循环。
使用Visual Studio 2015,完全优化,发布编译器。
答案 0 :(得分:3)
虽然我无法在Win7和Ubuntu(均为64位)上重现无限循环,但我相信问题是你的printf()函数有无符号八进制数表示,这会导致你认为它进入无限循环。将%o
参数更改为%u
可能会澄清问题。
答案 1 :(得分:1)
这是因为int类型溢出。请参阅类型limits。对于这么大的数字比较,您应该使用int
代替paintthis gpane = new paintthis(array);