pthread_join 和 return 值给出分段错误
pthread_join with a return value is giving segmentation fault
我正在尝试 运行 下面的代码,该代码使用 pthread_create 创建线程,returns 线程内部的计数。代码给我一个分段错误
#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(&first_thread, NULL, test_routine, NULL);
if (0 != result)
{
fprintf(stderr, "Failed to create thread %s\n", strerror(result));
exit(1);
}
result = pthread_join(first_thread, &thread_return);
if (0 != result) {
fprintf(stderr, "Failed to join a thread: %s\n", strerror(result));
pthread_exit(NULL);
}
printf("\nValue returning from the test routine %d\n", (int) thread_return);
free(thread_return);
exit(3);
}
void *test_routine(void *arg)
{
int count = 0;
count++;
pthread_exit(count);
}
当 thread_return
不包含从 malloc
返回的指针时,您将其传递给 free
。它包含一个转换为指针的整数值。
您应该只将 malloc
返回的内容传递给 free
,因此删除对 free
的调用。
我正在尝试 运行 下面的代码,该代码使用 pthread_create 创建线程,returns 线程内部的计数。代码给我一个分段错误
#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(&first_thread, NULL, test_routine, NULL);
if (0 != result)
{
fprintf(stderr, "Failed to create thread %s\n", strerror(result));
exit(1);
}
result = pthread_join(first_thread, &thread_return);
if (0 != result) {
fprintf(stderr, "Failed to join a thread: %s\n", strerror(result));
pthread_exit(NULL);
}
printf("\nValue returning from the test routine %d\n", (int) thread_return);
free(thread_return);
exit(3);
}
void *test_routine(void *arg)
{
int count = 0;
count++;
pthread_exit(count);
}
当 thread_return
不包含从 malloc
返回的指针时,您将其传递给 free
。它包含一个转换为指针的整数值。
您应该只将 malloc
返回的内容传递给 free
,因此删除对 free
的调用。