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

コードは実行され、時々クラッシュするだけです (私にはかなりランダムに見えます)。バージョン 1 が機能せず、バージョン 2 が機能する理由を誰か説明できますか? 2 番目のコードが時々クラッシュする理由について何か考えはありますか? ペイロードのサイズが事前定義されていないためでしょうか(ヘッダーファイルで次のように定義しました

char payload[]; 

私がそれを次のように定義すると:

char payload[10];

うまく機能しているように見えますが、クラッシュはかなりランダムであるため、テストするのは面倒です。

4

1 に答える 1