2017-11-27 3 views
-2

Ich habe ein Problem mit der Weitergabe eines Elements eines Arrays durch pthread_create als Parameter.Übergabe eines Elements eines Arrays (struct) durch pthread_create

Ich habe diese Struktur:

struct threadInfo { 
    int threadNumber; 
    int sleepTime; 
}; 

I initialisiert das Array (in Funktion) wie folgt aus:

struct threadInfo info[1]; 

dann in einer while-Schleife I dies tun:

int i = 0; 
... 
while (i < 2) { 
     pthread_mutex_lock(&countMutex); 
     if (threadsCount < MAX_THREAD) { 
       info[i].threadNumber = ++threadsCount; 
     pthread_mutex_unlock(&countMutex); 
       info[i].sleepTime = rand() % (10 + 1 - 1) + 1; 
       pthread_create(&threads[i], NULL, lawine, &info[i]); 
       i++; 
     } 
     else { 
       pthread_mutex_unlock(&countMutex); 
       break; 
     } 
    } 

threadsCount ist eine globale Var.

In der ersten Runde funktioniert es gut (info [0]). Aber in der zweiten Runde (Info 1) sind die Werte falsch. the output

Können Sie mir helfen?

+0

Bitte schreiben Sie keine Ausgabe als Links und nicht Bilder von Text posten, aber den Text posten. –

+0

Wie initialisieren Sie das Array (in einer Funktion) so: 'struct threadInfo info [];' *? –

+0

Wenn ein Fehler auftritt, ist es immer hilfreich, das Nicht-Wesentliche aus Ihrem Code zu entfernen, bis Sie ein ["Kurzes, eigenständiges, korrektes (kompilierbares) Beispiel]" (http://sscce.org/) haben dass Sie (a) klarer sehen und verstehen können, was schief gelaufen ist (b) in der Lage sein, ein Programm mit anderen zu teilen, das sie leicht als Datei speichern, kompilieren und für sich selbst ausprobieren können, wenn Sie versuchen, Ihnen zu helfen. – ArjunShankar

Antwort

2

Sie gehen außerhalb der Grenzen Ihres Arrays, da Sie es nur für ein Element deklariert haben, aber Sie erwarten, dass es 2 enthält. Die Zahl innerhalb der eckigen Klammern in dieser Codezeile ...

struct threadInfo info[1]; 

... ist nicht der höchste Index, auf den Sie zugreifen können. Es ist die Anzahl der Elemente, wenn Sie also zwei Elemente haben wollen (und somit in der Lage sein, den Zugriff auf info[1]) Sie es wie so zuweisen müssen:

struct threadInfo info[2]; 
+0

manchmal ist es die kleinen Dinge, danke! –

Verwandte Themen