Tesla4o
@Tesla4o
Без пользы жизнь - безвременная смерть... В. Гете

Почему может не создаваться конструктор?

Есть два класса например А и В. Один класс вызывает конструктор другого.
Пример:
class A {
    A() {
        (new B());
    }
}


В линукс все создается без проблем, а вот в Windows 7 собирается без ошибок но при выполнении падает с ошибкой с0000005. Доходит до вызова этого конструктора и даже в него не заходит и падает.
Я понял это проблемы с выделением памяти?
  • Вопрос задан
  • 175 просмотров
Пригласить эксперта
Ответы на вопрос 3
Adamos
@Adamos
(new B());

Выделяется память под экземпляр класса В, запускается его конструктор, возвращаемая конструктором ссылка нигде не используется, деструктор никогда не вызывается.
Просто-таки академическая утечка памяти.
Судя по этому говнокоду, причина ошибки может быть где угодно в прочем коде.
Ответ написан
RiseOfDeath
@RiseOfDeath
Диванный эксперт.
"Замечательный" код. Только прежде чем выкладывать, было бы не плохо убедиться что на нем эта ошибка воспроизводится.

Сделайте минимально-возможный код, на котором у вас возникала бы проблема, в решении которой вы просите помощи. Вполне вероятно, что в процессе создания такового вы внезапно найдете свою ошибку (мож вы, например, стек вызовов где-то перед вызовом конструктора попортили).
А если сделать простой пример, где возникает ошибка, не получается - значит вы не правильно понимаете где она возникает и вероятно она где-то в "нагромождении", которое не получается из примера выкинуть.
Ответ написан
Комментировать
@vanyamba-electronics
Попробуйте так
class A {
public:
    A() {}
    static A* create(A* val = nullptr) {
       if (val == nullptr)
            val = new A();
       new B;
       return val;
     }
};
...
A* a = A::create();
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы