struct als Argument an pthread_create() übergeben
-
Hallo Community,
Ich versuche ein struct an pthread_create zu übergeben. beim Ausführen kommt aber immer ein Absturz mit "Speicherzugriffsfehler".
// Die Struktur struct proxyaddr { string host; string port; } // Thread-Funktion void *checkProxy(void *p) { struct proxyaddr *proxy = (struct proxyaddr*)p; // ... } // Start des Threads // proxylist ist ein vector<proxyaddr>, i ist für die for-Schleife pthread_create(&threads[i], NULL, checkProxy, &proxylist[i]);
Das ist der aktuelle Stand.
Ich habe schon einiges ausprobiert. Compilieren geht aber sobald das Programm dann zum pthread_create kommt, bricht es mit "Speicherzugriffsfehler" ab.Was ist falsch?
-
Bist du sicher, dass das referenzierte Objekt zum Startzeitpunkt des Threads noch lebt?
-
Ja, ich hatte es vorher in einer Schleife ohne Threads. Und ein cout bringt auch den Inhalt ohne Fehler.
-
warum
void *checkProxy(void *p)
{
struct proxyaddr *proxy = (struct proxyaddr*)p;
...und nicht gleich
void *checkProxy(proxyaddr *proxy)
{
....also ich denke nicht dass der Fehler jetzt daher kommt, aber trotzdem mal als Hinweis/Frage
-
Weil diese Funktion von pthread_create aufgerufen wird und die verlangt void* als Übergabetyp. Da kann man nur den Pointer zur Variblen/Struktur übergeben.
Ich hab es aber btw auch schon probiert und es geht nicht.
-
Ich habe das Problem jetzt gefunden.
Der Code war von Anfang an richtig. Ich hätte das Programm nur nch mit phread linken müssen. (-lphread)