私はここ数時間、Googleに取り組み、自分のコードに何が間違っているのか把握しましたが、わかりませんでした。構造体を使って複数の引数を渡すPOSIXスレッド
私は学生であり、スレッドなどについて学び始めたばかりです。これは私には全く新しいものです。経験はあまりありません。
Googleでの回答は、通常、コードの特定の問題に対する回答であり、実際にこの問題を解決する方法を見つけることができませんでした。だから私は、私は、関数thread_funcに複数の引数を渡すために使用する構造体のデータを持っている
#include <iostream>
#include <string>
#include <pthread.h>
#include <unistd.h>
#include <stdlib.h>
using namespace std;
struct Data{
string a;
string b;
};
void* thread_func(void *param){
struct Data *input = (struct Data*)param;
string data1 = input->a;
string data2 = input->b;
cout << "You said: " << data1 << " " << data2 << endl;
return NULL;
}
int main(int argc, char *argv[])
{
pthread_t child;
string arg, arg2;
struct Data *input;
cout << "Input 1: " << endl;
cin >> arg;
cout << "Input 2: " << endl;
cin >> arg2;
input->a = arg;
input->b = arg2;
pthread_create(&child, NULL, thread_func, (void *)&input);
pthread_join(child, NULL);
cout << "Synced" << endl;
return 0;
}
:
は、ここに私のコードの非常に単純化したバージョンです。
私のコードは実際に(少なくともLinux上で)コンパイルされますが、両方の値を入力するとSegmentationフォルトが発生します。
私は明らかに何か間違っています。私の推測は18行目ですが、私自身はこれを理解するのに十分な経験はありません。私はあなたに助けを求めています。
関数に複数の引数を渡すには、この構造体で何が間違っていますか?
私の実際の割り当てはこれより少し複雑ですが、私は可能な限り明確にするために最善を尽くしました。
ありがとう、この解決策は問題を解決しました。手伝ってくれてありがとう。 :) –