数组大小为2000及以上

时间:2014-04-30 18:27:31

标签: c arrays size

我正在编写有限差分方案的代码来近似PDE解决方案。为此我需要创建一个更大尺寸的双数组,因为我精炼了我的网格。问题是我得到了分段错误:11当我查看大小为1000的双数组时。我创建了这个简单的代码来识别我的问题。请告诉我如何解决这个问题

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

int main()
{
    int n, a=2000,i=0;
    double T=40;
    double time =25, k = T/(a-1);
    double Array[a][a];
    time=25;
    n=(time/k);
    for(i=0;i<a;i++)
    {
        Array[i][i]= 2+i;
    }
    printf("%d\n", n);
    printf("%lf\n", Array[600][600]);

}

请注意,a = 1000或更低可以正常工作。我的合伙人也正在研究fortran,并没有遇到同样的问题。

由于

1 个答案:

答案 0 :(得分:0)

您可以使用以下内容:

  #include <malloc.h>
  ...
  double** Array=malloc(m*sizeof(double*));
  if(Array==NULL){printf("malloc failed\n");}
  Array[0]=malloc(m*n*sizeof(double));
  if(Array[0]==NULL){printf("malloc failed\n");}
  for (i=0;i<m;i++){
      Array[i]=&Array[0][i*n];
  }
  ...
  Array[j][i]=i+j;
  ...
  free(Array[0]);
  free(Array);

malloc用于分配内存,free用于释放内存。

再见,

相关问题