我有一個C++ Qt靜態庫,有兩個類 - dataprocthread和calcvalue。在第一個中,當我調用計算值的一個實例的方法時,指針this
(其引用dataprocthread類)突然變爲null
。「這個」指針變爲空C++
這是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
}
當我運行這段代碼,它突然臨危信號 「段錯誤」。使用調試器,我發現DataProcThread::run()
函數中的問題:當我調用cv->processData
函數時,一切正常。但在下一行(if (this->_sarray[0] != myval)
),this
指針變爲null
(我可以在本地窗口中看到它),因此,我無法訪問this->_sarray
變量。
在情況下,它是很重要的,這就是我如何啓動線程(從另一個類我的圖書館外):
DataProcThread* thread = new DataProcThread(sarray, val);
QObject::connect(thread, SIGNAL(workDone(int)), this, SLOT(collectWork(int)));
thread->start();
我做錯了嗎?
我猜'this - > _ sarray [0]'爲空。 –
在'this'變爲'null'之前,我可以在Locals窗口中看到'sarray'值。 – ahawkthomas
也許你的processData正在寫內存 – marcinj