C++ 为什么这会进入无限循环?
为什么这个结果会进入无限循环 在进入C++ 为什么这会进入无限循环?,c++,C++,为什么这个结果会进入无限循环 在进入for循环后,我打印了I和v.size()-2的值,它们分别是0和-1。因此,循环条件必须是false。那么,这个程序首先是如何进入for循环的 #include <iostream> #include <vector> int main() { std::vector<int> v {1}; std::cout << "Size:: " << v.size(); for (
for
循环后,我打印了I
和v.size()-2的值,它们分别是0
和-1
。因此,循环条件必须是false
。那么,这个程序首先是如何进入for
循环的
#include <iostream>
#include <vector>
int main() {
std::vector<int> v {1};
std::cout << "Size:: " << v.size();
for (int i=0 ; i <= (v.size()-2) ; i++) {
std::cout << "Hello";
}
return 0;
}
#包括
#包括
int main(){
std::向量v{1};
std::cout问题在于在下溢后与无符号数字进行比较
向量的大小是1。你可以将其细分为2,然后在数学上得到-1。但是,在无符号数学中,你得到的是一个非常大的数字,因此循环的持续时间比你预期的要长得多
要避免这种情况,请将减法替换为加法:
i+2 <= v.size()
i+2“打印v.size()的值-2”的确切位置在哪里?您的程序可能有未定义的行为,因为i++
导致有符号整数溢出。编译器应该警告您有符号-无符号比较。如果没有,请找出如何增加警告。解决此类问题的正确工具是调试器。在询问之前,您应该逐行检查代码关于堆栈溢出。有关更多帮助,请阅读。至少,您应该[编辑]您的问题将包括一个重现您的问题的示例,以及您在调试器中所做的观察。@ChristianHackl:您不能将一个数字与其类型相比太大,因为操作数首先转换为公共类型。有关将负数分配给无符号整数的详细信息,请参阅: