在 QT 中有以下代码启动线程以发送命令。该线程将 char * 和 int 作为参数。在“运行”中,我使用构造函数给出的指针。代码是:
MyThread::MyThread(char * payld, int payld_size)
{
payload_size = payld_size;
payload_p = payld;
}
void MyThread::run()
{
while(...)
{
sendCommand(payload_p, payload_size);
}
}
不幸的是,这不起作用,当我尝试使用 thread.start() 时,我的应用程序崩溃了。但是当我将其更改为:
MyThread::MyThread(char * payld, int payld_size)
{
payload_size = payld_size;
payload_p = payld;
for(int i=0; i<payload_size; i++)
{
payload[i] = payld[i];
}
}
void MyThread::run()
{
while(...)
{
sendCommand(payload, payload_size);
}
}
代码确实运行并且有时只会崩溃(对我来说看起来很随机)。谁能解释一下为什么第一版不起作用而第二版起作用?以及为什么第二个代码有时会崩溃的任何想法?可能是因为没有预定义有效载荷的大小(在头文件中我将其定义为
char payload[];
当我将其定义为:
char payload[10];
它似乎工作得更好,但测试很烦人,因为崩溃是非常随机的。