Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 阵列大小为2000及以上_C_Arrays_Size - Fatal编程技术网

C 阵列大小为2000及以上

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

我正在写一个有限差分格式的代码来近似PDE解。为此,我需要在细化网格时创建一个较大的双数组。问题是我得到了分段错误:当我经过1000大小的双数组时,是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]);

}
#包括
#包括
#包括
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有用),但这会使其更难调整大小。