阵列分段故障中的c错误

时间:2016-11-28 08:16:41

标签: c linux macos pthreads posix

我试图在osx和linux ubuntu中的终端中运行此代码:

{{1}}

我在终端中运行了这些命令:

cc -pthread main.c

./ a.out 1 1

但它给了我段错误:osx中的11 和linux中的段故障(核心转储),  为什么??

2 个答案:

答案 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);

其中,第三个参数iint,但预期参数的类型为void *(*start_routine) (void *)。这会调用undefined behavior

您需要提供一个函数指针,类似calculateMult或类似的东西。