Я пытаюсь передать эту функцию: void* checkMatrix();
в качестве аргумента этой функции: void createThreads(void*(*f));
.
Я прочитал здесь пост, поэтому мое заявление выше является результатом этого.
Я вызываю функцию следующим образом: createThreads(checkMatrix);
, но она предупреждает меня, что тип несовместим [void ** и void * ()].Я могу обойтись с быстрым приведением, но это не решит проблему.
Наконец, я пишу такую функцию (простая инициализация):
void createThreads(void* (*f)) {
pthread_t* a;
int i;
a = (pthread_t*) malloc(*arr.l * sizeof(pthread_t));
if (a == NULL) {
fprintf(stderr, "ERROR!\n");
exit(1);
}
for (i = 0; i < *arr.l; i++) {
if (pthread_create((a + i), NULL, (void*) &f, NULL)) {
fprintf(stderr, "ERROR IN THREAD CREATION!\n");
exit(2);
}
}
for (i = 0; i < *arr.l; i++)
pthread_join(*(a + i), NULL);
}
В заключение проблема заключается в том, чточто это останавливается из-за проблем с памятью, но причиной является создание потоков и особенно в третьем аргументе, который я указываю функцию, над которой будет работать поток.Я думаю, что я делаю что-то не так с вызовом.Я не могу найти ответ и не могу обойти его.
Спасибо за ваше время!