C - 在运行时创建一个大小大于 10M 的数组

标签 c arrays runtime 64-bit malloc

我想在运行时用 C 语言创建一个大约 1000 万行的数组,其精确大小只有在运行时才知道。这是它的第一个剪辑:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(int argc, char **argv)
{
  printf("running\n");
  long long size = atoi(argv[1]);
  printf("%lld\n", size);
  int myArray[size];
  printf("allocated array\n");
  for (long long i = 0; i< size; i++) {
    myArray[i] = 1;
  }
  printf("Done");
}

我的问题是这个段错误。

>./a.out 100000000

running
100000000
Segmentation fault: 11

我想我必须做一个 malloc 才能让它工作,但我不太正确。

最佳答案

没有可移植的方法来检测自动分配的失败。在 Linux 上,您可以使用 ulimit -s 检查它并将其设置为无限制:ulimit -s unlimited

但即使这样也不能告诉您如此大的分配是否成功。更安全的方法是使用 malloc() 进行动态分配并检查分配是否成功:

  int *myArray = malloc( size * sizeof *myarray);
  if(!myarray) { /* allocation failed */}

关于C - 在运行时创建一个大小大于 10M 的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23711763/

相关文章:

c - 如何调试可能的堆损坏?

c - 打印变量类型结构元素

c - 我的程序C语言中的小错误

java - Java中如何存储对的数组?

java - 来自java的外部程序不会终止

java - 我的代码编译时出现错误,但在运行时执行良好

c - dlmalloc 中的内存对齐掩码

c++ - 打印没有索引 cpp 的字符数组时出错

C# 联合和数组复制

ios - 如何调整 NSURLSession 方法 dataTaskWithUrl