Сложность передачи структуры через pthread_create - PullRequest
2 голосов
/ 28 марта 2012

У меня есть массив структур, и я собираюсь передать каждый элемент массива в отдельные pthreads в цикле for.

Вот моя структура:

struct arrayData{
int *a;
int *b;
int up, low;

}

Вот указатель на первую структуру и malloc (не знаю, если я вполне понимаю, что здесь происходит):

struct arrayData * instance;
        instance = malloc(sizeof(struct arrayData)*n);

Вот мой вызов pthread_create:

pthread_create( &thread[i], NULL, add, (void *)instance[i]);

И для этой строки я получаю сообщение «Невозможно преобразовать в тип указателя».

Что может быть не так с этой строкой?

Ответы [ 2 ]

6 голосов
/ 28 марта 2012

Вы пытаетесь преобразовать структуру в указатель в последнем параметре. Вам нужно передать адрес структуры с &.

pthread_create( &thread[i], NULL, add, &instance[i]);

Как упомянул Йоргенсен , приведение void * не нужно.

2 голосов
/ 28 марта 2012

instance имеет тип struct arrayData *, следовательно, instance[i] имеет тип struct arrayData, который является агрегатом, а не указателем.Предполагаемое использование было, вероятно,

pthread_create(&thread[i], NULL, add, &instance[i]);

Бросок, кстати, бессмысленно.

...