【问题标题】:Segfaults on initialization of array of pthread_tpthread_t 数组初始化的段错误
【发布时间】:2014-12-20 22:44:06
【问题描述】:

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

pthread_t threads[n*n];

现在,对于任何 n <= 1023,它都可以正常工作,但是当我尝试使用 n > 1023 时,我得到了一个段错误。正是这一行导致了它——我的代码没有超越它。我对为什么会发生这种情况有点困惑,希望能提供所有可能的帮助。

【问题讨论】:

  • 一个超线程?祝你好运。
  • 是的,我现在意识到这并不是一个绝妙的主意。我猜仍然有助于了解我的堆栈分配限制是什么......

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


【解决方案1】:

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

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

当然,一旦你完成了数组,你需要释放这个内存:

free(threads);

【讨论】:

    猜你喜欢
    • 2011-04-18
    • 2014-12-25
    • 1970-01-01
    • 1970-01-01
    • 2014-03-01
    • 1970-01-01
    • 2020-12-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多