我正在编写有限差分方案的代码来近似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,并没有遇到同样的问题。
由于
答案 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
用于释放内存。
再见,