我制作了一个包含两个类的程序。基类包括其派生类的指针对象。然后我在基类的构造函数中初始化指针对象。
我的编译器在编译期间没有给我错误,但是当控制台窗口出现时程序崩溃,导致派生类对象的错误为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.
}
答案 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();
}