【问题标题】:Dealing with large arrays without getting runtime error处理大型数组而不会出现运行时错误
【发布时间】:2015-04-04 08:37:27
【问题描述】:

当我使用大小为 10^5*10^5 的数组时出现运行时错误(例如 int a[100000][100000]。由于此数组消耗更多内存,这可能是运行时错误的原因之一。

我应该如何声明这个数组(二维数组 ex.int a[100000][100000])以便我可以处理SIGSEGV 运行时错误的问题?

请提供声明此类数组的方法?

【问题讨论】:

  • 你在这里分配了 80GB 的内存,除非机器有那么多的虚拟内存,至少是问题之一
  • 当我尝试在在线编码平台提交解决方案时,动态分配也会导致此数组大小出现运行时错误。

标签: c arrays runtime segmentation-fault


【解决方案1】:

声明大数组int a[100000][100000]的三种方式是:

  1. 使大数组全局化
  2. 制作大数组static:

    static int a[100000][100000];
    
  3. 使用malloc/calloc,动态分配大数组:

    int **a;
    a=malloc(sizeof(int*)*100000);
    for(int i=0;i<100000;i++)
        a[i]=malloc(sizeof(int)*100000);
    
    /*Use the array*/
    
    for(int i=0;i<100000;i++)
        free(a[i]);
    free(a);
    

【讨论】:

    猜你喜欢
    • 2019-05-11
    • 2012-07-05
    • 1970-01-01
    • 1970-01-01
    • 2018-09-15
    • 2020-02-26
    • 2011-12-08
    • 1970-01-01
    • 2021-02-12
    相关资源
    最近更新 更多