带有 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没有在此代码中指出分段错误。最奇怪的是分段错误有时会发生(很少),而不是每次都发生!也许这不是一个好问题,但我对这个错误感到非常困惑。

您没有在构造函数中调用QWidget构造函数(我假设QWidgetQWidget_add_travel的超类)。因为没有调用超类的构造函数,所以堆上分配给小部件的数据处于未定义状态,即迟早会出现问题。

这是一个固定版本:

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

我还冒昧地通过将this传递给布局构造函数来简化布局构造

相关内容

  • 没有找到相关文章

最新更新