我遇到了一个非常奇怪的问题。它与此处描述的类似: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都可以解释这里发生了什么?
答案 0 :(得分:2)
检查您是否忘记实际创建类实例。接下来我建议你使用GDB。 1)gdb 2)设置后叉模式子3)运行4)你显然会发现你的分段错误 - 键入&#34; bt&#34;看到回溯。 5)我强烈推测你只是在没有初始化为Corr2DThread的情况下对Corr2DThread指针进行操作。