在析构函数上的Segfault

时间:2012-01-08 22:19:14

标签: c++ qt constructor segmentation-fault

当我关闭我的应用程序并且析构函数为此类运行时,我对seg故障感到沮丧。

vlocationdropdowns.h:

#include <QWidget>

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

vlocationdropdowns.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;时,我会遇到段错误。

我是管理记忆的新手,所以我意识到这可能是一个菜鸟问题,但我现在正在搞乱它。我已经注释掉了我能做的所有内容 vlocationdropdowns.cpp它仍然是错误的,所以我现在不知道。可能导致这种情况的原因是什么?

1 个答案:

答案 0 :(得分:3)

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

  • 代码看起来没错。试试干净的构建。
  • 在析构函数中放置一个printf以查看它是否被调用。
  • 分离到一个只执行新程序的小程序并删除。
  • 在没有Q_OBJECT
  • 的情况下试用
  • 以同样的方式尝试自行创建和删除QWidget
  • 为什么不使用传递给构造函数的参数?