2014-07-12 6 views
0

매우 이상한 문제가 발생했습니다. 여기에 설명 된 것과 비슷합니다 : http://www.qtforum.org/article/20389/problems-with-qlist.html. 헤더 파일에서 QList를 선언 할 때 소스 파일에서 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 전문가가 여기에서 무슨 일이 일어나고 있는지 설명 할 수 있습니까?

+0

Qt는 C++ 예외를 발생시키지 않습니다. 오류에 대해 좀 더 자세히 설명해 주시겠습니까? –

+0

분할 오류 –

+0

디버거로 실행 해 보셨습니까? 백 트레이스 란 무엇입니까? –

답변

2

클래스 인스턴스를 실제로 생성하는 것을 잊었는지 확인하십시오. 다음으로 나는 GDB를 사용할 것을 권고한다. 1) gdb 2) follow-fork-mode child를 설정하십시오. 3) run 4) 분명히 세분화 오류를 잡을 것입니다. "bt"를 입력하면 백 트레이스를 볼 수 있습니다. 5) Corr2DThread를 초기화 한 상태에서 Corr2DThread 포인터를 조작했다고 가정합니다.

+0

이것은 실제로 일어났습니다. 이 특별한 경우에는 Corr2DThread에 대한 포인터가 초기화되지 않았습니다. 다시 한번 감사드립니다. –

+0

언제나 환영합니다. – Zorgiev