我在用 C 语言制作一个简单的 pthreads 程序时遇到分段错误,我不明白为什么



这个简单的代码编译得很好,但当我使用pthread_join(t1, NULL)时,它返回分段故障(核心转储(

int number = 0;
void* change_number(void *x){
printf("helo from some threadn");
int num = *(int *)x;
printf("%dn", number);
number += num;

printf("a thread increased the variable by %dn", num);
}
int main(int argc, char* argv[])
{
pthread_t t1;
pthread_t t2;
printf("1) SUccess code: %dn", pthread_create(&t1, NULL, change_number, (void *) 5));
printf("2) Success code: %dn", pthread_create(&t2, NULL, change_number, (void *) 11));
printf("%dn",pthread_join(t1, NULL));
printf("thread 1 finishedn");
pthread_join(t2, NULL);
}

这里的问题是什么?如果它有任何相关性,我会在VM中运行

正如其他人所指出的,您的问题在(void *) 5中,这很容易解决:

int foo = 5, bar = 11;
printf("1) SUccess code: %dn", pthread_create(&t1, NULL, change_number, (void *) &foo));
printf("2) Success code: %dn", pthread_create(&t2, NULL, change_number, (void *) &bar));

如前所述,您应该将foobar变量设置为全局变量。

(void*)5表示将5视为指针,其中您似乎想要的是指向包含5的int变量的指针。

最新更新