내가 작업 중이던 프로그램 중 하나에서 버그를 발견하고 코드를 추출했으며 기본적으로이 문제가 있습니다.
그것은 무한 루프에 서명 INT 결과에 부호 비교 않습니다 나는C++ 부호없는 무한 루프 비교 버그
#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를 사용하여 전체 최적화, 릴리스 컴파일러.
무한 루프가 확실합니까? 이것은 특히 인쇄에 상당한 시간이 걸리기 때문에 나에게는 매우 긴 루프처럼 보입니다. 종료 조건이 작동하는지 보려면'i + = 1000'으로 변경하십시오. – dasblinkenlight
이것은 서명 된/서명되지 않은 비교의 문제가 아닙니다. 값 '1000000'은 두 범위에 있으며, 이것이 그 이유라고 가정하고 문제를 해결하려고했지만 작동하지 않았습니다. – AhmadWabbi
왜 #include'하지만'printf'를 사용합니까? –
dxiv