当计数器在循环中使用时,c++程序会崩溃
C++ program crashes when counter is used inside loop
我正在编写一个非常小的程序,用于在c++中查找整数的除数。我的main方法基本上是将一个int变量转换为一个var变量,然后调用以int作为参数的factor方法。下面是代码:
void factor(int num)
{
for(int x = 0; x < ((num + 2) / 2); x++)
{
if((num % x) == 0)
{
cout << x << " ";
}
}
}
程序总是在factor()内崩溃。如果我使用这段代码,它运行得很好:
void factor(int num)
{
for(int x = 0; x < ((num + 2) / 2); x++)
{
{
cout << x << " ";
}
}
}
所以问题在if((num % x) == 0)
的某个地方。当我将该行更改为if((num % 2) == 0)
或if((num % 5) == 0)
时,它会产生正确的结果(我使用32作为测试输入)。
几年前我学过c++,后来大部分都忘记了,在遇到这个问题之后,我逐字逐句地复制了我之前解决这个问题的代码(这是有效的)。但是每当我尝试访问循环计数器时,程序仍然崩溃。
我在Arch Linux 64位上使用Code::Blocks 13.12 with GCC "4.9.0 20140604 (pre - release)"
问题是在第一个代码片段中有一个除零,根据标准(n3337) 未定义行为:
5.6p4
乘法运算符[expr.mul]
二进制
/
运算符得到商,二进制%
运算符得到第一个表达式除以第二个表达式的余数。如果/
或%
的第二个操作数为零,则行为未定义。
由于程序不能计算这样的表达式的值,它将崩溃。
if((num % x) == 0) // num % 0 on first iteration, application will crash, or order pizza
{
cout << x << " ";
}
当x为0时,您如何做num%x
?由于在x为0时使用它,程序崩溃。
这将导致运行时错误,我认为是SIGFPE
。
在for的第一个循环中,x的值为0。Num % x需要除以0,这在数学上是没有意义的,这就是崩溃的原因。
您希望看到该数字的所有除数(它们除该数字,剩下0进行结余)。你应该在2点开始for循环。(1已经是给定的——你可以直接把它打印出来,但你只会打印一半的数字,所以我怀疑你对1和数字本身不感兴趣)
尝试从x = 1
开始循环。
如果你想计算一个数字的因数,从0开始没有任何意义。%
运算符计算除数num/x
的余数。除0没有任何意义,因此该操作的行为是未定义的。这意味着它可以在一个编译器/机器上崩溃,而可以在另一个编译器/机器上产生某种结果。
- Mongodb c++驱动程序:如何查询元素的数组
- C++,系统无法执行指定的程序
- 在C++程序中输入的文本文件将不起作用,除非文本被复制和粘贴
- 在VS代码中交叉编译Windows与Linux上的MinGW的SDL程序
- C++ Windows 驱动程序MSB3030无法复制该文件,因为它找不到
- 重载操作程序时出错>>用于类中的字符串 memebr
- 获取日期异步信号安全吗?如果在信号处理程序中使用,它会导致死锁吗
- 试图在visual studio上用C++创建一个桌面应用程序
- 模板元程序查找相似的连续类型名称
- FFmpeg:制作一个应用程序比直接使用ffmepg更好吗
- 如何通过cpp程序运行shell脚本
- 有没有什么方法可以使用一个函数中定义的常量变量,也可以由c++中同一程序中的其他函数使用
- IPC使用多个管道和分支进程来运行Python程序
- 如何将c++程序的一些输出传递给shell,以便在shell中使用
- 使用C++程序合并排序没有得到正确的输出
- 基于boost的程序的静态链接——zlib问题
- 程序崩溃并显示"std::out_of_range"错误
- 在C应用程序中运行C++(带有STL)函数
- 使用mongocxx驱动程序时包含头文件问题
- 如何在c++程序中找到函数的地址