析构函数上的Segfault

Segfault on destructor

本文关键字:Segfault 析构函数      更新时间:2023-10-16

当我关闭应用程序并且析构函数为这个类运行时,seg错误让我感到沮丧。

vlocationdropdowns.h:

#include <QWidget>
class VLocationDropDowns : public QWidget
{
  Q_OBJECT
public:
  VLocationDropDowns(QString activeText, QWidget *parent = 0);
  ~VLocationDropDowns();
};

vlocationdropdown.cpp:

VLocationDropDowns::VLocationDropDowns(QString activeText, QWidget *parent) :
 QWidget()//I've also had this as QWidget(parent, Qt::Widget)
{
}
VLocationDropDowns::~VLocationDropDowns()
{
}

我已经在另一个类的构造函数中创建了这个类的对象(locationLineEdit是一个指针)(也许我应该说这个类也继承了QWidget):

locationDropDowns = new VLocationDropDowns(randomString, this);

但是当该类的析构函数运行delete locationDropDowns;时,我得到一个segfault。

我是管理记忆的新手,所以我意识到这可能是一个棘手的问题,但我现在已经把它搞砸了。我已经把我能写的所有内容都评论掉了vlocationdropdown.cpp,它仍然是seg断层,所以我现在不知道。是什么原因造成的?

我会按照以下顺序尝试一些建议:

  • 代码看起来没有错。尝试干净的构建
  • 在析构函数中放入一个printf,看看它是否被调用
  • 隔离到一个小程序,只做新的和删除
  • 尝试不使用Q_OBJECT
  • 以同样的方式,尝试单独创建和删除QWidget
  • 为什么不使用传递到构造函数中的参数