Я пишу программу, которая принимает целые числа в качестве аргументов командной строки.Для каждого из этих чисел я должен создать поток, который вычисляет ряд Фибоначчи до этого числа.Эта функция возвращает структурный указатель на главное место, где печатаются данные.
Теперь я правильно выполнил вычисления fib и проверил их, напечатав ряд внутри функции.
Возникла проблемакогда я пытаюсь вернуть указатель структуры, созданный в функции потока, и использовать его для печати данных в основном.
typedef struct thread_func_param
{
int *fib;
int size;
} thread_func_param;
//===================================================
void *fibGen(void *parameters)
{
int num = atoi(parameters);
struct thread_func_param *p;
p = malloc (sizeof (thread_func_param));
p->size = fibSize(num);
p->fib = malloc(sizeof(int)* p->size);
//Fibonacci Calculations
//..
//.
return (void *) p;
//pthread_exit((void *) p);
}
//===================================================
int main(int argc, char* argv[])
{
void* thread_result;
thread_func_param* p = malloc( sizeof(thread_func_param));
assert(argc > 1);
int noOfThreads = argc - 1;
printf("No of Thread = %d\n", noOfThreads);
pthread_t *threadID = malloc (sizeof (pthread_t) * noOfThreads);
pthread_attr_t attributes;
pthread_attr_init(&attributes);
int i, j;
for(i = 0; i < noOfThreads; i++)
{
pthread_create(&threadID[i], &attributes, fibGen, argv[i+1]);
pthread_join(threadID[i], thread_result);
//HOW TO USE THE RETURNED DATA?
for (j = 0; j< ((thread_func_param*)thread_result->size)-1; j++)
printf(" %d ", (thread_func_param*)thread_result->fib[j]);
}
return 0;
}
Решение, которое я использую, в конце концов, для печати данных, дает ошибкуразыменование пустого указателя (я новичок в C).Как я могу это исправить?