关于pthread_t数组初始化的Segfaults

时间:2014-10-25 03:22:47

标签: c segmentation-fault pthreads variable-length-array

我有一个程序从命令行获取输入n,并且,作为其操作的一部分,尝试调用以下代码:

pthread_t threads[n*n];

现在,对于任何n <= 1023,这都可以,但是当我尝试使用n > 1023时,我会遇到段错误。正是这条特殊的线条导致了它 - 我的代码没有超越它。我有点困惑为什么会发生这种情况,并希望得到所有可能的帮助。

1 个答案:

答案 0 :(得分:2)

这是因为数组的大小(即指针的大小乘以2 ^ 20)太大而不能保存在自动存储器中(即在堆栈上)。您可以使用动态分配来解决此问题:

pthread_t *threads = malloc(sizeof(pthread_t) * n * n);

当你完成数组后,你需要释放这个内存:

free(threads);