“this”指针变为null c ++

时间:2013-04-02 08:40:54

标签: c++ qt qthread

我有一个带有两个类的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();

我做错了什么?

1 个答案:

答案 0 :(得分:2)

正如评论中所指出的那样,问题发生在processData函数中:它写的是内存。

我只是使用了strncpy而不是strcpy而问题已经消失(here对此很好解释。)