Сегфо на деструкторе - PullRequest
       22

Сегфо на деструкторе

0 голосов
/ 09 января 2012

Я разочарован ошибкой сегмента, когда закрываю свое приложение, и деструктор запускается для этого класса.

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;, я получаю segfault.

Я новичок в управлении памятью, поэтому я понимаю, что это, вероятно, вопрос нуба, но сейчас я перебираюсь с ним.Я закомментировал все содержимое того, что мог, в vlocationdropdowns.cpp, и он все еще неисправен, поэтому я понятия не имею.Что может быть причиной этого?

1 Ответ

3 голосов
/ 09 января 2012

Некоторые предложения я бы попробовал в следующем порядке:

  • Код не выглядит неправильно. Попробуйте чистую сборку.
  • Поместите printf в деструктор, чтобы увидеть, вызывается ли он.
  • Выделите небольшую программу, которая просто создает новую, и удалите.
  • Попробуйте без Q_OBJECT
  • Таким же образом попробуйте создать и удалить QWidget самостоятельно.
  • Почему вы не используете параметры, переданные в конструктор?
...