c - 当输入非常大时,我得到段错误

标签 c arrays stack

<分区>

我写了下面的代码,它打印了一个数组。但是当输入非常大时,例如 J=40000,我会得到 Segmentation fault。你能告诉我为什么会这样吗?这是因为数组的维度太大,还是我做错了什么?

    int main(){

    int i,j,J;
    printf("Give the number J: \n");
    scanf("%d", &J);

    double k[J-1];
    double d[J-1];
    double p[J-1];
    double A[J-1][3];       
    double h=1.0/(double)J;

    for(j=0; j<J-1; j++){
        k[j]=-1.0/(h*h);
        d[j]=2.0/(h*h);
        p[j]=-1.0/(h*h);
  }


  for(j=0; j<J-1; j++){
        A[j][0]=k[j];
        A[j][1]=d[j];
        A[j][2]=p[j];
    }


    A[0][0]=0.0; 
    A[J-2][2]=0.0;

    for(j=0; j<J-1; j++){
      for(i=0; i<3; i++){
        printf("%lf  ",A[j][i]);
    }
    printf("\n\n");
}
return 0;
}

最佳答案

可能是堆栈溢出的问题。您的基于堆栈的数组 kpdA 将需要:

40000 x (1 + 1 + 1 + 3) x 8 = 1920000 bytes

例如大约两兆字节。默认的最大堆栈大小通常为 1 兆字节。

参见例如http://msdn.microsoft.com/en-us/library/tdkhxaks.aspxChange stack size for a C++ application in Linux during compilation with GNU compilerGetting a stack overflow exception when declaring a large array .

关于c - 当输入非常大时,我得到段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20961280/

相关文章:

c - Posix AIO 损坏/损坏?

arrays - 如何创建可 for 循环的已分配但零长度数组?

java - 从字节数组中获取一系列位

c - 尝试在 C 中动态分配多维数组会导致崩溃

algorithm - 使用两个队列和有限队列大小实现堆栈

c++ - 什么可以阻止 C++ 中的堆栈展开过程?

linux - 确定线程的堆栈大小和位置

c++ - 如何在 Arduino 上格式化长加千位分隔符

c - 如何计算数据包有效负载中的字节数?

c - 如何在linux中的c中获取pid的所有后代子进程id