スレッドの戻り値を使用しようとしています。そのために私はちょうど次の記事を見つけました: How to return a value from thread in CC pthread、ポインタが内容を失う
だから私は、次のコードを使用します。
#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
void *myThread()
{
int ret = 42;
// printf("%d\n", ret);
printf("%p\n",(void*)&ret);
void * ptr = (void*)&ret;
printf("%p\n", ptr);
printf("%d\n", *((int *)ptr));
return (void*) &ret;
}
int main()
{
pthread_t tid;
static void *status;
// int ret = 42;
// status = &ret;
// printf("%d\n", *((int *)status));
pthread_create(&tid, NULL, myThread, NULL);
pthread_join(tid, &status);
printf("%p\n",((int *)status));
printf("%d\n", *((int *)status));
return 0;
}
出力は、次のとおりです。 0x7f7ead136f04、 0x7f7ead136f04、 、 0x7f7ead136f04、
なぜ最後の値が42でないのですか?ここ
同じ問題:
#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
void* aufgabe_drei_thread() {
int i = 5;
return &i;
}
int main(int argc, char** argv) {
int* ptr_wert_aus_drei;
pthread_t thread_three_id;
pthread_create(&thread_three_id, NULL, aufgabe_drei_thread, NULL);
pthread_join (thread_three_id, &ptr_wert_aus_drei);
printf("Der Wert aus Thread 3 ist: %d\n", *((int *)ptr_wert_aus_drei));
return (EXIT_SUCCESS);
}
出力です:デアワートAUSスレッド3イスト:32508 ない5.
私は間違って何をしているのですか?
ローカル変数へのポインタを返すことはできません。関数が終了すると、ローカル変数は破棄されます。 – Havenard