Вы должны иметь возможность передавать указатель как есть, поскольку каждый тип указателя объекта в C может быть неявно преобразован в / из void*
. Тем не менее, правильнее отменить ссылку на указатель на один уровень. То есть:
pthread_create(&thread[i], NULL, process, *str);
ВАЖНО: Предполагается, что str
указывает на переменную, которая будет не go вне области видимости во время выполнения потока! Передача указателей на локальные переменные потокам является распространенным источником ошибок.
С этого момента ваш обратный вызов потока должен сделать что-то вроде этого:
void * process(void *arg) {
struct mystruct* ms = arg;
struct mystruct** ptr_ms = &arg;
Однако указатель разыменования ошибки "error" к неполному типу "просто означает, что определение структуры невидимо для потока, в результате чего тип структуры будет рассматриваться как неполный. Так что проблема может быть также в пропущенном #include
.