如何修复基类中的内存分配错误?

时间:2011-11-14 17:03:19

标签: c++ memory object unhandled-exception

我制作了一个包含两个类的程序。基类包括其派生类的指针对象。然后我在基类的构造函数中初始化指针对象。

我的编译器在编译期间没有给我错误,但是当控制台窗口出现时程序崩溃,导致派生类对象的错误为UNHANDLED EXCEPION BAD ALLOCATION。我该怎么做才能解决它?

以下是代码:

class x;

class y
{
    private:

      x *objx; // here is the error
    ...........................

};

class x: public y
{
    ...........................
    ................
};

y::y()
{
     objx=new x(); // bad allocation and the program crashes

     // I have also tried this way by commenting objx=new x();

     *objx=0; // but still the program crashes.
}

2 个答案:

答案 0 :(得分:1)

因为在派生类中调用构造函数会调用父类中的构造函数,所以看起来你会有一个递归构造问题 - 这可能导致异常。

为了避免你可以将“new x()”移出构造函数到它自己的函数中。

答案 1 :(得分:1)

正如另一个答案所解释的那样,你有一个无限递归的构造问题。您可能想尝试在构造函数中将指针设置为null,并创建一个方法 init ,它将构成实际对象:

y::y()
{
     // *objx=0; // this is wrong, you don't want to dereference your pointer.
     objx = 0;   // this should work
}

void y::init()
{
     objx = new x();
}