2012-03-28 3 views
2

Ich habe ein Array von Strukturen und ich beabsichtige, jedes Element des Arrays in separate Pthreads in einer for-Schleife übergeben.Schwierigkeit struct durch pthread_create

Hier ist meine Struktur:

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

}

Hier ist der Zeiger auf die erste Struktur und eine malloc (weiß nicht, ob ich recht, was hier geht):

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

Hier Mein Aufruf an pthread_create:

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

Und für diese Zeile bekomme ich die Meldung "Kann nicht in einen Zeigertyp konvertieren".

Was könnte mit dieser Linie falsch sein?

Antwort

5

Sie versuchen, eine Struktur im letzten Parameter in einen Zeiger zu konvertieren. Sie müssen die Adresse der Struktur mit & übergeben.

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

Als jørgensen mentioned, die void * Besetzung ist nicht erforderlich.

+0

Ausgezeichnet! Vielen Dank. Müssen die Bücher auf C in diesem Sommer schlagen, da ich viel zu rostig bin. Warum bekomme ich immer noch eine Warnung für diese Zeile, die besagt, dass "Argument 3 von 'pthread-create' von einem inkompatiblen Zeigertyp übergeben wird?" – Chucky

+0

Was ist die Signatur Ihrer 'add'-Funktion? –

+0

"void * hinzufügen (void * arg) {" – Chucky

2

instance ist vom Typ struct arrayData * daher instance[i] ist vom Typ struct arrayData, der ein Aggregat ist, kein Zeiger. Vorgesehene Verwendung war wahrscheinlich

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

Die Besetzung, BTW, ist sinnlos.