头文件中的QList声明会导致源文件中出现分段错误

时间:2014-07-12 14:28:20

标签: c++ qt visual-c++ qlist qt5.1

我遇到了一个非常奇怪的问题。它与此处描述的类似: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,那么everythig就可以了,如下面的代码所示:

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

1 个答案:

答案 0 :(得分:2)

检查您是否忘记实际创建类实例。接下来我建议你使用GDB。 1)gdb 2)设置后叉模式子3)运行4)你显然会发现你的分段错误 - 键入&#34; bt&#34;看到回溯。 5)我强烈推测你只是在没有初始化为Corr2DThread的情况下对Corr2DThread指针进行操作。