Объявление QList в заголовочном файле вызывает ошибку сегментации в исходном файле

Я столкнулся с очень странной проблемой. Это похоже на описанный здесь: http://www.qtforum.org/article/20389/problems-with-qlist.html .
Когда я объявляю QList в своем заголовочном файле и пытаюсь использовать его в исходном файле, программа завершается с ошибкой сегментации.

Вот фрагмент:

файл threads.h:

class Corr2DThread
{
private:
QList<Sequence *> seqs_;
...
};

файл threads.cpp:

void Corr2DThread::addSequence(Sequence *seq)
{

QLOGX("Thread " << idx_ << " adding new sequence (" << seqs_.size() << "), name: '" << seq->name() << "'"); //this code fails due to call seqs_.size()
QLOGINC;
int activeCount = seq->activeItems();
Q_ASSERT(activeCount > 0);
QLOG("Contains " << activeCount << " active object images");
seqs_.append(seq);

QLOGDEC;
}

Однако, если я объявлю, что QList локально, все в порядке, как показано в коде ниже:

void Corr2DThread::addSequence(Sequence *seq)
{
QList<Sequence *> seqs_;

QLOGX("Thread " << idx_ << " adding new sequence (" << seqs_.size() << "), name: '" << seq->name() << "'");
QLOGINC;
int activeCount = seq->activeItems();
Q_ASSERT(activeCount > 0);
QLOG("Contains " << activeCount << " active object images");
seqs_.append(seq);

QLOGDEC;
}

Я провел много часов, пытаясь заставить это работать, без удачи / знания. Любой QT-гуру может объяснить, что здесь происходит?

0

Решение

Проверьте, не забыли ли вы на самом деле создать экземпляр класса. Далее я любезно советую вам использовать GDB. 1) gdb 2) установить дочерний режим follow-fork 3) run 4) Очевидно, вы поймете вашу ошибку сегментации — наберите «bt», чтобы увидеть обратную трассировку. 5) Я полагаю, что вы просто оперируете указателем Corr2DThread без инициализации его для созданного Corr2DThread.

2

Другие решения


По вопросам рекламы [email protected]