簡體   English   中英

頭文件中的QList聲明導致源文件中的分段錯誤

[英]QList declaration in header file causes a segmentation fault in the source file

我遇到了一個很奇怪的問題。 它類似於此處描述的內容: http : //www.qtforum.org/article/20389/problems-with-qlist.html 當我在頭文件中聲明QList並嘗試在源文件中使用它時,該程序失敗並出現分段錯誤。

這是一個片段:

thread.h文件:

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

thread.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專家都可以解釋這里發生了什么?

檢查您是否忘記了實際創建類實例。 接下來,我建議您使用GDB。 1)gdb 2)設置跟隨叉模式的孩子3)運行4)您顯然會遇到分段錯誤-輸入“ bt”以查看回溯。 5)我高度假定您只對Corr2DThread指針進行操作,而沒有將其初始化為構造的Corr2DThread。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM