0

我遇到了一个非常奇怪的问题。它与此处描述的类似:http ://www.qtforum.org/article/20389/problems-with-qlist.html 。当我在头文件中声明 QList 并尝试在源文件中使用它时,程序因分段错误而失败。

这是一个片段:

线程.h 文件:

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

线程.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-guru 都可以解释这里发生了什么?

4

1 回答 1

2

检查您是否忘记实际创建类实例。接下来,我建议您使用 GDB。1) gdb 2) set follow-fork-mode child 3) run 4) 你显然会发现你的分段错误——输入“bt”来查看回溯。5)我高度假设您只是在 Corr2DThread 指针上进行操作,而没有将其初始化为构造的 Corr2DThread。

于 2014-07-12T16:08:56.557 回答