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
в конструктор макетов.