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

C++ 如何修复基类中的内存分配错误?,c++,memory,object,unhandled-exception,C++,Memory,Object,Unhandled Exception,我制作了一个包含两个类的程序。基类包括其派生类的指针对象。然后在基类的构造函数中初始化指针对象 我的编译器在编译期间没有给我错误,但是当控制台窗口出现时,程序崩溃,为派生类的对象提供未处理的异常错误。我该怎么做才能修好它 代码如下: class x; class y { private: x *objx; // here is the error ........................... }; class x: public y { ..

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

我的编译器在编译期间没有给我错误,但是当控制台窗口出现时,程序崩溃,为派生类的对象提供
未处理的异常错误
。我该怎么做才能修好它

代码如下:

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.
}

由于在派生类中调用构造函数将调用父类中的构造函数,因此您可能会遇到递归构造问题,这可能是导致异常的原因


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

正如另一个答案中所解释的,您有一个无限递归构造问题。您可能希望尝试在构造函数中将指针设置为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();
}

请修复代码缩进。这是什么语言?您应该相应地标记它。但是,编译器在初始化派生类的数据成员时会给出错误。我现在该怎么办!我也试过了。但是我前面提到的问题是,当我这样做时,父类Y和派生类x的数据成员仍然未初始化,我不知道为什么!!该错误在pacman.exe中的0x00401dd9处弹出为未处理异常:0xC0000005:访问冲突读取位置0x00000020。对于类x和y的所有数据成员,您确定在创建对象y后调用init()吗?Y;y、 init();