为什么这个循环是无限的
Why is this loop infinite?
我有一些用于绘制多边形边的代码,例如,在顶点为 0、1 和 2 的三角形中绘制边 (0, 1)、(1, 2) 和 (2, 0)。我以为我可以像这样完成:
for(size_t j = 0, k = 1; j <= vertices.size()-1; j++, k++){
if(j == vertices.size()-1){k = 0;} //For j to k final edge
...
//draw edges, etc.
...
}
。但这会使k值爆炸成无限循环。我已经查看了一下,并怀疑问题可能出在我的索引中,但如果一切都取决于 j,我会认为 vertices.size() 可能搞砸了。我是否在此代码中遗漏了某些内容,或者我应该更仔细地查看实际的顶点向量?
你不需要计算 k :
size_t const count = vertrices.size()
for(size_t j = 0; j < count; j++) {
size_t k = (j + 1) % count;
// draw
}
这样k
是j+1
,除非 j 是最大值,在这种情况下它是 0。
如果你
不确保vertices
至少有一个条目,减法vertices.size()-1
可能会导致下溢(即减法size_t(0)-1
的非常大的值),你的循环可能会比你想要的长得多。
一个更惯用的解决方案是循环
for (size_t j = 0, k = 1; j < vertices.size(); j++, k++) {
if ( j == vertices.size()-1) { //works, vertices has at least one entry
k = 0;
}
...
//draw edges, etc.
...
}
如果向量"顶点"为空,则循环将近似无限。您在条件中使用无符号整数算术,因此 -1 将0xFFFFFFF或更大。
如果除了你在这里给出的之外的所有内容都是正确的,它就不会是无限循环。因此,最好的答案是仔细检查代码的其他部分。
相关文章:
- 过载'operator new'如何导致无限循环?
- C++正则表达式无限循环
- 程序在尝试猜测它选择的随机数时进入无限循环?
- 遍历链表时的无限循环
- 循环链表:无限循环
- 比较两个字符串后卡在无限循环中
- 在做一段时间内检查字符的无限循环
- 逐字读取文本文件中的每一行并转换为 int(无限循环或崩溃?
- 在这个无限循环中,当输入 0 时终止,当输入 int 范围之外的任何内容时,程序行为不正常
- 可能的无限循环
- 超出 int 的值范围后的无限循环
- 为什么这段代码会导致无限循环?
- 运行无限循环的最小二叉树问题
- 在分配和发布递增循环迭代器时C++无限循环(gcc 错误?
- 连接线程时的无限循环
- 为什么这种方法会进入无限循环?
- 由于QTextStream的无限循环
- Qt 在另一个线程中无限循环
- 从文件 C++ 读取时的无限循环
- 试图找出为什么我的代码保持无限循环