在函数调用时获得堆栈溢出

Getting stack overflow on function call

本文关键字:堆栈 栈溢出 函数调用      更新时间:2023-10-16

我有一个基类,三个类从它继承。每当在函数中实例化这些子类时,就会在函数进入函数体时发生堆栈溢出。它们可以在接近结尾或开头时实例化,这无关紧要。一旦进入函数体,就会出现堆栈溢出。如果删除了类,则函数可以正常运行。子类只包含一个被重写的函数,以及它们的构造函数和析构函数。构造函数和析构函数都为空。

int main()
{
    Borrow borrow;
    MovieStore store( "STORE!!!!!!" );
    store.initalize();
    store.processTransaction();
    return 0;
}

不确定这有多大帮助,但基本上借用是子类。一旦进入函数体,就会导致堆栈溢出。即使我在返回0之前实例化它,它仍然会在进入函数体时崩溃。如果它被删除,程序运行正常。我实际上是在一个不同的函数中声明borrow (main更短),但无论它被放入哪个函数,它都具有相同的效果。

class Borrow : public Transaction
{
public:
    Borrow();
    virtual ~Borrow();

    virtual void perform( Customer *, Item * );
};

Borrow和其他子类是一样的。空构造函数和析构函数,带有一个覆盖的虚函数。

执行的实现是:

void Borrow::perform( Customer *customer, Item *aMovie )
{
    customer->addMovie( aMovie, "B" );
}

我猜你的函数是递归的,你从来没有停止调用它

多亏了UncleBens,我能够弄清楚具有大对象的类被实例化多次,从而创建堆栈溢出。