在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];
它似乎工作得更好,但测试很烦人,因为崩溃很随机。
答案 0 :(得分:2)
而不是摆弄char*
,我会切换到QString(因为你正在使用Qt)。这需要一些学习,但在此框架中使代码顺利运行几乎是必须的。然后声明
QString payload;
并且取决于sendCommand
实现,使用其中一个成员函数QString来获取char *,如payload.toLatin1()