1

在 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];

它似乎工作得更好,但测试很烦人,因为崩溃是非常随机的。

4

1 回答 1

2

而不是摆弄char*,我会切换到QString(因为你使用的是Qt)。这需要一些学习,但让代码在这个框架中顺利运行几乎是强制性的。然后声明

QString payload;

并根据sendCommand实现,使用成员函数 QString 之一来获取 char*,例如payload.toLatin1()

于 2013-04-23T10:58:49.227 回答