我的程序崩溃了,我无法找到原因

时间:2016-07-04 11:14:34

标签: c++ methods crash

我制作了一个程序来实现c ++中的分数。我之所以这样做,是因为它是我在家里跟随的c ++课程的一种功课。程序编译但在启动后会很快崩溃。我自己搜索一个答案,我发现只是在创建一个新对象时它会崩溃。这是错误的代码。

//a and b are for the numerators and denominator in the fraction: a/b
ZFraction::ZFraction(int numer, int denom):m_numer(numer), m_denom(denom)//this constructor made it crash
{
    if(m_numer != 0)
    {
        m_numer = m_denom % m_numer;
        m_denom = m_denom/m_numer;
    }
    else
    {
        cout << "Fraction impossible";
    }
} 

为什么会崩溃?提前谢谢。

1 个答案:

答案 0 :(得分:1)

m_numer的值在各部门之间发生变化。例如,如果您有denom = 20numer = 10,那么

m_numer = m_denom % m_numer

指定m_numer = 0。然后在计算m_denom时得到除零。我建议用原始值进行计算,即

ZFraction::ZFraction(int numer, int denom):m_numer(numer), m_denom(denom)
{
    if(numer != 0)
    {
        m_numer = denom % numer;
        m_denom = denom/numer;
    }
    else
    {
        cout << "Fraction impossible";
    }
}

在旁注中,考虑抛出异常而不是写在cout上,这样,如果numer == 0,你就不会有伪造值的构造对象。

此外,分子是分数顶部的名称,而不是底部的名称。