C ++ abort()对函数内部的抽象类对象指针进行调用

时间:2018-05-28 00:40:07

标签: c++

我有一个抽象类摆,有纯虚函数period()和两个后代(math和spring)实现函数period()。

我有一个钟摆** pendArray =新钟摆* [n]。 我用数学和spring类对象指针填充数组,并将数组传递给findMaxPeriod(pendulum ** a)函数:

void findMaxPeriod(pendulum **a) 
{
    pendulum *maxPend = new math();
    double maxPeriod = 0;
    double period1;
    for (int i = 0; i < n; i++)
    {
        pendulum *pend = a[i];
        period1 = pend->period();
        if (period1 > maxPeriod)
        {
            maxPend = a[i];
        }
    }
    cout << "max period pendulum is " << maxPend << ". It's period is " << maxPend->period();
}

它在

上崩溃了
period1 = pend->period();

带有“调试错误!abort()被称为”

我做错了什么? 这是我的所有代码:https://hello-site.ru/share/Abort-called-problem/ 提前谢谢。

1 个答案:

答案 0 :(得分:0)

问题在于:

math pendM;
cin >> pendM;
pendArray[i] = &pendM;

在第三行中,您已将指向pendM的指针放入数组中,但pendM会在该行超出范围后立即销毁。如果你想保留它(从而避免在你的pendArray中悬空指针),你需要从堆中而不是在堆栈中分配它。

同样的事情发生在pendS下面的下一个区块中。