Cでマルチスレッドを利用するために構造体を関数に渡そうとしていますが、どういう仕組みか分かりません。さまざまなエラーメッセージを出すさまざまな構文を試したので、私の特定のクエリが以前に答えられたかどうかはわかりません。私は、私がやりたいことに似せることができる最もシンプルなコードをまとめました。たとえ人のために働いているようなこのサイトの同様の例と一致するように設定しても、それでも私にエラーが表示されます。私はちょうど非常に単純なものを見逃していると思っています。構造体をvoid *ポインタとして渡すときに初期化子が無効になる
#include <pthread.h>
#include <stdio.h>
typedef struct {
int i_start;
int i_end;
} my_struct;
void *func(void *ptr) {
int j_start;
int j_end;
my_struct input = (my_struct *) ptr;
j_start = input.i_start;
j_end = input.i_end;
printf("%d %d\n", j_start, j_end);
}
int main() {
my_struct qwerty;
qwerty.i_start = 0;
qwerty.i_end = 1;
pthread_t tid;
pthread_create(&tid, NULL, func, &qwerty);
return 0;
}
をこの特定のコードは私にコンパイルエラーを与える:
test.c: In function 'func':
test.c:14:20: error: invalid initializer
my_struct input = (my_struct *) ptr;
私は、私はいくつかの異なるものを試してみたが、私はできない、言ったようにとにかく、ここでコンパイルされませんコードです正しく理解する。助けてくれてありがとう。
'my_struct input =(my_struct *)ptr;' - > 'my_struct input = *(my_struct *)ptr;'また、 'func'は値を返す必要があります。 – BLUEPIXY
実験的にCを学習すると、あなたが得たくない場所に移動します。 –
さらに、別の問題に直面することがあります.funcスレッドが開始または完了する前にメインスレッドが終了することがあります。これをどう対処するかを見てください(http://stackoverflow.com/a/40514326/1275169)。 –