我有一个程序从命令行获取输入n
,并且,作为其操作的一部分,尝试调用以下代码:
pthread_t threads[n*n];
现在,对于任何n <= 1023
,这都可以,但是当我尝试使用n > 1023
时,我会遇到段错误。正是这条特殊的线条导致了它 - 我的代码没有超越它。我有点困惑为什么会发生这种情况,并希望得到所有可能的帮助。
答案 0 :(得分:2)
这是因为数组的大小(即指针的大小乘以2 ^ 20)太大而不能保存在自动存储器中(即在堆栈上)。您可以使用动态分配来解决此问题:
pthread_t *threads = malloc(sizeof(pthread_t) * n * n);
当你完成数组后,你需要释放这个内存:
free(threads);