Tôi cần truyền nhiều đối số cho một hàm mà tôi muốn gọi trên một chuỗi riêng. Tôi đã đọc rằng cách điển hình để làm điều này là xác định một cấu trúc, chuyển hàm một con trỏ đến đó và tham chiếu nó cho các đối số. Tuy nhiên, tôi không thể làm cho điều này hoạt động:
#include <stdio.h>
#include <pthread.h>
struct arg_struct {
int arg1;
int arg2;
};
void *print_the_arguments(void *arguments)
{
struct arg_struct *args = (struct arg_struct *)args;
printf("%d\n", args -> arg1);
printf("%d\n", args -> arg2);
pthread_exit(NULL);
return NULL;
}
int main()
{
pthread_t some_thread;
struct arg_struct args;
args.arg1 = 5;
args.arg2 = 7;
if (pthread_create(&some_thread, NULL, &print_the_arguments, (void *)&args) != 0) {
printf("Uh-oh!\n");
return -1;
}
return pthread_join(some_thread, NULL); /* Wait until thread is finished */
}
Đầu ra cho điều này phải là:
5
7
Nhưng khi tôi chạy nó, tôi thực sự nhận được:
141921115
-1947974263
Có ai biết tôi đang làm gì sai không?