gpt4 book ai didi

c++ - "this"指针变为空 c++

转载 作者:行者123 更新时间:2023-11-30 04:19:33 25 4
gpt4 key购买 nike

我有一个包含两个类的 C++ Qt 静态库 - dataprocthreadcalcvalue。在第一个中,当我从 calcvalue 的实例调用方法时,指针 this(引用 dataprocthread 类)突然变为

这是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);
}

计算值.h:

class CalcValue
{
public:
CalcValue();
int processData(int someval);
};

计算值.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 变量。

如果它很重要,这就是我启动线程的方式(从我的库之外的另一个类):

DataProcThread* thread = new DataProcThread(sarray, val);
QObject::connect(thread, SIGNAL(workDone(int)), this, SLOT(collectWork(int)));
thread->start();

我做错了什么?

最佳答案

正如评论中所指出的,问题发生在 processData 函数中:它正在覆盖内存。

我只是用了strncpy而不是 strcpy问题消失了(here 是对此的一个很好的解释)。

关于c++ - "this"指针变为空 c++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15759614/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com