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)


Anmelden zum Antworten