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();