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];
うまく機能しているように見えますが、クラッシュはかなりランダムであるため、テストするのは面倒です。