【问题标题】:Runtime Error while allocating an array on the stack [duplicate]在堆栈上分配数组时出现运行时错误[重复]
【发布时间】:2017-02-17 04:45:55
【问题描述】:
int main() {
      long long int n, m, j, l, a[1000000000][1000000000];
      int k, i;
      scanf("%lld", & n);
      scanf("%lld", & m);
      for (j = 0; j < n; j++) {
        for (l = 0; l < m; l++) {
          a[j][l] = 0;
          printf("%d\n", a[j][l]);
        }
      }
      for (j = 0; j < n; j++) {
        for (l = 0; l < m; l++) {

          printf("%d\n", a[j][l]);
        }
      }
      return 0;
    }

当我运行它时,我总是遇到运行时错误。有人可以建议我解决它吗?我需要这个来解决一个竞争性编程问题,其中 ChessBoard 可能有 1000000000*1000000000 个方格,我需要用它执行多个操作。

【问题讨论】:

  • 我有点懒得数零,但您似乎分配了至少 400 PB 的内存。这可能有点多。

标签: c arrays stack runtime-error long-integer


【解决方案1】:

因为在大多数实现中,您不能创建那么大的局部变量。

你真的有 10000000000*10000000000 = 100000000000000000 字节的内存吗?

在大多数系统上,限制在 64k 到 10mibyte 之间。当然不是任何接近您尝试制作 [][] 的大小。

您需要使用malloc 来尝试分配内存。局部变量是在运行时在堆栈上创建的,您的堆栈内存不足,导致程序崩溃。

【讨论】:

  • 我怀疑使用malloc 会有所帮助:)
  • 你永远不知道他可能有一台 128 位计算机,其地址空间为 ram 的完整地址空间 ;-)
猜你喜欢
  • 1970-01-01
  • 2012-08-17
  • 2014-07-22
  • 2021-12-03
  • 2013-09-11
  • 1970-01-01
  • 2013-03-16
  • 2014-10-02
相关资源
最近更新 更多