C++ 使用QWidget的分段错误构造函数。Qt/C++;

C++ 使用QWidget的分段错误构造函数。Qt/C++;,c++,qt,segmentation-fault,qwidget,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 faul

我有这个问题。 有时(但很少)我的程序在启动时崩溃。 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
构造函数(我假设
QWidget
QWidget\u add\u travel
的超类)。因为没有调用超类的构造函数,所以在堆上为小部件分配的数据处于未定义状态,即,迟早会有东西坏掉

这里有一个固定版本:

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

我还冒昧地将
这个
传递给布局构造函数,从而简化了布局构造。

可能您的堆已损坏。这到底意味着什么?我认为这只会发生在delete操作符中。有没有可能这段代码是在一个指针上调用的成员函数中,由于某些错误原因,它可能会不时为null ptr?我说这个错误不在您提供的代码中,所以很难给出建议。尽管@Christophe有一个很好的观点。请发布更多的相关代码否,这不是解决方案,因为最初我的代码与您所说的一样。@CodeBott然后您应该提供一个最小但完整的示例,以复制segfault以获得帮助。@Murphy这是一个示例。Segm故障正好发生在该代码运行时。此外,QDebugger指出了这一点code@CodeBott正如其他人所指出的那样,它并不完整。您不能将它复制到空项目中,编译并运行它。请阅读。请注意构造函数中的
:QWidget(父)
调用。这与提供的代码不同。