У меня есть такой кусок коды:pthread_join бесплатно(): недопустимая ошибка указателя
void *write_parallel(void *num_for_chunk) {
struct rusage *sum = (struct rusage*) malloc(sizeof(struct rusage));
if(sum==NULL) {
perror("Writing buffer: ");
}
sum->ru_utime.tv_sec = 0;
sum->ru_utime.tv_usec = 0;
sum->ru_stime.tv_sec = 0;
sum->ru_stime.tv_usec = 0;
pthread_exit(sum);
}
Я получил поточно таблицу:
pthread_t* thread_table = (pthread_t *) malloc(sizeof(pthread_t)*num_of_threads);
Я создаю нить :
pthread_create(thread_table+(sizeof(pthread_t)*j),NULL,write_parallel,&num_for_chunk);
И присоединиться:
pthread_join(*(thread_table+(sizeof(pthread_t)*j)),&part_res);
Когда я запускаю программу, я получил:
*** Error in `./write_test': free(): invalid pointer: 0x00007f6b6e44a700 ***
Я думаю, что есть проблема, когда нить исчезает, и я хочу, чтобы получить значение, которое было передано pthread_exit, но я не знаю, как почини это.
К сожалению, я не отправлял его на первый. Я должен динамически распределять эту таблицу. Я отредактировал свой вопрос. –
@WojciechReszelewski: вы ** также ** можете обращаться к элементам в динамически распределенном массиве с помощью оператора '[]'. – alk