pthread_join с возвращаемым значением выдает ошибку сегментации

#c #pthreads #posix #pthread-join

#c #pthreads #posix #pthread-join

Вопрос:

Я пытаюсь запустить приведенный ниже код, который создает поток с использованием pthread_create и возвращает количество внутри потока. Код выдает ошибку сегментации

 #include <pthread.h>
#include <stdlib.h>
#include <string.h>
#include <stdio.h>

void *test_routine(void *arg);

int main(int argc, char **argv)
{
    pthread_t first_thread; 
    void *thread_return;
    int result = 0;
    
    result = pthread_create(amp;first_thread, NULL, test_routine, NULL);
    if (0 != result) 
    {
        fprintf(stderr, "Failed to create thread %sn", strerror(result));
        exit(1);
    }
    
    result = pthread_join(first_thread, amp;thread_return);
    
    if (0 != result) {
        fprintf(stderr, "Failed to join a thread: %sn", strerror(result));
        pthread_exit(NULL);
    }
    printf("nValue returning from the test routine  %dn", (int) thread_return);

   free(thread_return);
   exit(3);
}

void *test_routine(void *arg) 
{
    int count = 0;
    count  ;
    pthread_exit(count);
}
  

Ответ №1:

Вы передаете thread_return в free , когда он не содержит указатель, возвращенный из malloc . Вместо этого он содержит целочисленное значение, которое было преобразовано в указатель.

Вы должны передавать только free то, что было возвращено из malloc , поэтому удалите вызов free .