Как исправить ошибку выделения памяти в базовом классе? - PullRequest
0 голосов
/ 14 ноября 2011

Я сделал программу, которая содержит два класса. Базовый класс включает объект-указатель своего производного класса. Затем я инициализирую указатель объекта в конструкторе базового класса.

Мой компилятор не выдает ошибку при компиляции, но программа вылетает, когда появляется окно консоли, выдавая ошибку 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 ]

1 голос
/ 15 ноября 2011

Как объяснено в другом ответе, у вас бесконечно рекурсивная проблема построения. Возможно, вы захотите установить нулевой указатель в конструкторе и создать метод 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();
}
1 голос
/ 14 ноября 2011

Поскольку вызов конструктора в производном классе вызовет конструктор в родительском классе, похоже, что у вас там будет рекурсивная проблема конструирования, которая, вероятно, вызывает исключение.

Во избежание этого выможет переместить "new x ()" из конструктора в его собственную функцию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...