在循环内使用计数器时,C ++程序崩溃

the_pwner224

我正在开发一个非常小的程序,用于查找C ++中整数的除数。我的主要方法几乎将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位上使用带有GCC“ 4.9.0 20140604(prerelease)”的Code :: Blocks 13.12。

菲利普·罗森-refp

问题是,您的第一个代码段中存在被零除的行为,根据标准(n3337),该行为不确定的

5.6p4 乘法运算符 [expr.mul]

二元/运算符产生商,二元%运算符从第一个表达式除以第二个表达式得到余数。如果/的第二个操作数%为零,则行为不确定。


由于程序无法计算此类表达式的值,因此将崩溃。

if((num % x) == 0)  // num % 0 on first iteration, application will crash, or order pizza
{
  cout << x << " ";
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章