我有一个带有两个类的C ++ Qt静态库 - dataprocthread 和 calcvalue 。在第一个中,当我从 calcvalue 的实例调用方法时,指针this
(引用 dataprocthread 类)突然变为null
这是 dataprocthread.h :
class DataProcThread : public QThread
{
Q_OBJECT
public:
DataProcThread(int sarray[9], int val);
signals:
workDone(int result);
private:
int _sarray[9];
int _val;
void run();
};
dataprocthread.cpp :
DataProcThread::DataProcThread(int sarray[9], int val)
{
for (int x = 0; x < 9; x++)
{
_sarray[x] = sarray[x];
}
_val = val;
}
void DataProcThread::run()
{
CalcValue* cv = new CalcValue();
int myval = 0;
for (int i = 0; i < 100; i++)
{
myval = cv->processData(this->_val);
if (this->_sarray[0] != myval)
{
//do something
}
}
emit workDone(intValue);
}
calcvalue.h :
class CalcValue
{
public:
CalcValue();
int processData(int someval);
};
calcvalue.cpp :
CalcValue::CalcValue()
{
}
int processData(int someval)
{
//do something and return int value
}
当我运行此代码时,它突然收到信号“Segmentation fault”。使用调试器,我发现DataProcThread::run()
函数中的问题:当我调用cv->processData
函数时,一切正常。但是在下一行(if (this->_sarray[0] != myval)
)上,this
指针变为null
(我可以在Locals窗口中看到它),因此,我无法访问this->_sarray
变量。< / p>
如果它很重要,那就是我如何启动线程(来自我库外的另一个类):
DataProcThread* thread = new DataProcThread(sarray, val);
QObject::connect(thread, SIGNAL(workDone(int)), this, SLOT(collectWork(int)));
thread->start();
我做错了什么?