程序导致无限循环
Program causes infinite loop
这是有问题的程序。为什么会导致无限循环?
#include <vector>
#include <iostream>
using namespace std;
class Workshop
{
public:
int pictureFrames( vector<int> pieces );
};
int Workshop::pictureFrames( vector<int> pieces )
{
int count = 0;
for ( int i = 0 ; i < pieces.size() - 2 ; i++ )
{
for ( int j = i + 1; j < (pieces.size() - 1) ; j++ )
{
for ( int k = j + 1; k < (pieces.size()); k++ )
{
bool possible = (pieces[i] + pieces[j] > pieces[k]) &&
(pieces[j] + pieces[k] > pieces[i]) &&
(pieces[k] + pieces[i] > pieces[j]);
if ( possible )
count++;
}
}
}
return count;
}
void main()
{
Workshop w;
vector<int> pieces;
pieces.push_back( 100 );
w.pictureFrames( pieces );
}
向量的size()
方法返回size_t
,这是一个无符号类型。当你取一个值为 1
的无符号类型并从中减去 2 时,你会得到一个非常大的数字。
如果将以下行放在 pictureFrames
方法中,您将观察到为什么循环需要这么长时间才能执行。
cout << pieces.size() - 2 << endl;,
您是否尝试过使用完整诊断进行编译?
看这里: http://coliru.stacked-crooked.com/a/e29de5a6cd9bd21e
main.cpp:15:25: warning: comparison of integers of different signs: 'int' and 'unsigned long' [-Wsign-compare]
for ( int i = 0 ; i < pieces.size() - 2 ; i++ )
~ ^ ~~~~~~~~~~~~~~~~~
[内循环重复两次,对void main()
的抱怨]
诊断非常有启发性。
int
被提升为unsigned long
(或任何size_t
(,并与pieces.size() - 2
相比,由于模算术,真的很大。
相关文章:
- 程序在尝试猜测它选择的随机数时进入无限循环?
- 在这个无限循环中,当输入 0 时终止,当输入 int 范围之外的任何内容时,程序行为不正常
- 在控制台上输出我从文件中读取的整数,将程序插入无限循环
- 如何找出为什么我的程序一直有一个无限循环?
- Atmel Studio 7:ASF 库提供的 USART 中断处理程序仅在 main() 中遇到无限循环时工作一次?
- 对程序使用 switch 语句,导致选项的无限循环
- 无限循环使程序停止工作
- 为什么当用户输入除整数之外的任何内容时,我的程序会无限循环输出?C++
- 如何在 Windows 上的C++控制台应用程序中捕获 ctrl-c 事件,而不会进入无限循环
- 基本菜单驱动程序C ,无限循环
- 简单的TicTacToe.程序处于无限循环中
- 这是一个无限循环吗?程序提前完成
- 为什么我的程序在输入字符时有一个无限循环
- 角色计数程序无限循环
- 为什么我在程序集中的嵌套 for 循环会导致无限循环
- 如何在我的程序中突破无限循环
- 我的程序中的无限循环
- 使程序在无限循环中等待时使用更少的 CPU
- 从C++应用程序运行批处理脚本,并检查它是否具有无限循环
- 程序进入无限循环