我正在编写有限差分方案的代码来近似偏微分方程解。为此,我需要在细化网格时创建一个更大尺寸的双数组。问题是当我遍历大小为 1000 的双数组时,我得到了 Segmentation failure: 11。我创建了这个简单的代码来识别我的问题。请让我知道如何解决这个问题
#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,没有遇到同样的问题。
谢谢
最佳答案
你可以使用类似的东西:
#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
用于释放内存。
再见,
关于c - 数组大小为 2000 及以上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23395437/