在QT中传递指针时出错

时间:2013-04-23 10:29:03

标签: qt pointers

在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];
它似乎工作得更好,但测试很烦人,因为崩溃很随机。

1 个答案:

答案 0 :(得分:2)

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

QString payload;

并且取决于sendCommand实现,使用其中一个成员函数QString来获取char *,如payload.toLatin1()