2014-07-12 58 views
0

我遇到了一個非常奇怪的問題。它與此處描述的相似:http://www.qtforum.org/article/20389/problems-with-qlist.html。 當我在頭文件中聲明一個QList,並且試圖在源文件中使用它時,程序將因分段錯誤而失敗。頭文件中的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都可以解釋這裏發生了什麼?

+0

Qt不拋出C++異常,你可以對你得到的錯誤更具體一些嗎? –

+0

分段錯誤 –

+0

您是否嘗試將其運行到調試器中?什麼是回溯? –

回答

2

檢查您是否忘記實際創建類實例。接下來,我懇請您使用GDB。 1)gdb 2)設置follow-fork-mode子3)運行4)顯然你會發現你的分段錯誤 - 輸入「bt」來查看回溯。 5)我高估你只是在Corr2DThread指針上運行,而沒有初始化它來構建Corr2DThread。

+0

這實際上是這種情況。在這種特殊情況下,沒有初始化指向Corr2DThread的指針。再次感謝。 –

+0

您隨時歡迎。 – Zorgiev

相關問題