C 阵列大小为2000及以上
我正在写一个有限差分格式的代码来近似PDE解。为此,我需要在细化网格时创建一个较大的双数组。问题是我得到了分段错误:当我经过1000大小的双数组时,是11。我创建了这个简单的代码来识别我的问题。请告诉我如何解决这个问题C 阵列大小为2000及以上,c,arrays,size,C,Arrays,Size,我正在写一个有限差分格式的代码来近似PDE解。为此,我需要在细化网格时创建一个较大的双数组。问题是我得到了分段错误:当我经过1000大小的双数组时,是11。我创建了这个简单的代码来识别我的问题。请告诉我如何解决这个问题 #include<stdio.h> #include<stdlib.h> #include<math.h> int main() { int n, a=2000,i=0; double T=40; double tim
#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]);
}
#包括
#包括
#包括
int main()
{
int n,a=2000,i=0;
双T=40;
双倍时间=25,k=T/(a-1);
双数组[a][a];
时间=25;
n=(时间/k);
对于(i=0;i您可以使用以下内容:
#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(m*sizeof(double*);
如果(Array==NULL){printf(“malloc失败\n”);}
数组[0]=malloc(m*n*sizeof(double));
如果(数组[0]==NULL){printf(“malloc失败\n”);}
对于(i=0;i使用动态数组。您正在破坏堆栈。您正在创建一个包含4M个条目的数组,每个条目8字节,即32 MiB,给定或获取。对于大多数系统堆栈来说,该数组太大(通常限制为8 MiB,有时更少)。请使用动态分配,或将其设置为全局变量。(这是许多其他问题的重复——困难在于找到重复的问题。)谢谢。我将在C中查找动态分配。@PaulGriffiths:数组[I]
的所有值都在for
循环中初始化!这种分配内存的方式确保了值在内存中是连续的(对fftw、lapack有用),但这会使其更难调整大小。