[英]I get segmentation fault while making a simple pthreads program in C and I don't understand why
这个简单的代码编译得很好,但是当我使用pthread_join(t1, NULL)
它返回分段错误(核心转储)
int number = 0;
void* change_number(void *x){
printf("helo from some thread\n");
int num = *(int *)x;
printf("%d\n", number);
number += num;
printf("a thread increased the variable by %d\n", num);
}
int main(int argc, char* argv[])
{
pthread_t t1;
pthread_t t2;
printf("1) SUccess code: %d\n", pthread_create(&t1, NULL, change_number, (void *) 5));
printf("2) Success code: %d\n", pthread_create(&t2, NULL, change_number, (void *) 11));
printf("%d\n",pthread_join(t1, NULL));
printf("thread 1 finished\n");
pthread_join(t2, NULL);
}
这里有什么问题? 如果它有任何相关性,我会在 VM 中运行它
(void*)5
表示将5
视为指针,您似乎想要的是指向包含5 的int
变量的指针。
正如其他人所指出的,您的问题出在(void *) 5
中,这很容易解决:
int foo = 5, bar = 11;
printf("1) SUccess code: %d\n", pthread_create(&t1, NULL, change_number, (void *) &foo));
printf("2) Success code: %d\n", pthread_create(&t2, NULL, change_number, (void *) &bar));
如前所述,您应该将foo
和bar
变量设为全局变量。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.