#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
.