带有QWidget的Segmentation Fault构造函数。 QT / C ++

时间:2016-04-26 20:04:24

标签: c++ qt segmentation-fault qwidget

我有这个问题。 有时(但很少)我的程序在启动时崩溃。 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 个答案:

答案 0 :(得分:1)

您没有在构造函数中调用QWidget构造函数(我假设QWidgetQWidget_add_travel的超类)。由于未调用超类的构造函数,因此在窗口上为您的窗口小部件分配的数据处于未定义 状态,即迟早会出现故障。

这是一个固定版本:

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

我还可以通过将this传递给布局构造函数来自由地简化布局构建。