Segmentation Fault конструктор с QWidget. Qt/C++

У меня есть эта проблема. Иногда (но очень редко) происходит сбой моей программы при запуске. QDebugger указывает на ошибку сегментации, происходящую из этого кода:

view_add_bagagli::view_add_bagagli(QWidget*parent):QWidget(parent),setBagWid(new QWidget_add_lug(this)),
setPropWid(new QWidget_add_owner(this)),
setViaWid(new QWidget_add_travel(this)){} // segm fault at this line

И это код конструктора QWidget_add_travel:

QWidget_add_travel::QWidget_add_travel(QWidget *parent) : Qwidget(parent),via_l(new QVBoxLayout()){
    setLayout(via_l);
    build();
}

Но QDebugger НЕ указал на ошибки сегментации в этом коде. Самое странное, что ошибка сегментации происходит иногда (очень редко), а НЕ каждый раз! Может быть, это не очень хороший вопрос, но я очень озадачен этой ошибкой.

1 ответ

Вы не звоните QWidget конструктор в вашем конструкторе (я предполагаю, QWidget это суперкласс QWidget_add_travel). Поскольку конструктор суперкласса не вызывается, данные, размещенные в куче для вашего виджета, находятся в неопределенном состоянии, то есть рано или поздно что-то сломается.

Вот исправленная версия:

QWidget_add_travel::QWidget_add_travel(QWidget *parent) 
        : QWidget(parent), via_l(new QVBoxLayout(this))
{
    build();
}

Я также позволил себе упростить конструкцию макета, передав this в конструктор макетов.

Другие вопросы по тегам