我试图在osx和linux ubuntu中的终端中运行此代码:
{{1}}
我在终端中运行了这些命令:
cc -pthread main.c
./ a.out 1 1
但它给了我段错误:osx中的11 和linux中的段故障(核心转储), 为什么??
答案 0 :(得分:1)
我认为您需要更改pthread_create调用,因为您在pthread_create
中传递了错误的参数。另请查看pthread_create
返回。
你需要这样的东西
int s = pthread_create(&tid[i], NULL, (void *)calculateMult, (void *)&i);
if (s != 0)
printf("pthread_create failed");
您还需要将功能更改为:
void *calculateMult(void *i) {
int *j = (int*) i;
arrayName[*j] = x * (*j);
return NULL;
};
所以你已经完成了。
答案 1 :(得分:0)
在您的代码中,您正在调用
pthread_create(&tid[i], NULL, (void *) i, NULL);
其中,第三个参数i
是int
,但预期参数的类型为void *(*start_routine) (void *)
。这会调用undefined behavior。
您需要提供一个函数指针,类似calculateMult
或类似的东西。