处理大型数组而不会出现运行时错误

Dealing with large arrays without getting runtime error

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

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

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

声明大数组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);