我有一个抽象类摆,有纯虚函数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/ 提前谢谢。
答案 0 :(得分:0)
问题在于:
math pendM;
cin >> pendM;
pendArray[i] = &pendM;
在第三行中,您已将指向pendM
的指针放入数组中,但pendM
会在该行超出范围后立即销毁。如果你想保留它(从而避免在你的pendArray
中悬空指针),你需要从堆中而不是在堆栈中分配它。
同样的事情发生在pendS
下面的下一个区块中。