为什么我在 n>500 时会出现 seg 故障?用 C 语言编码



在我为欧拉项目中的问题28编写的以下代码中。它需要沿着数字递增的扩展平方的两个对角线添加数字。当我设置num>500时,它会导致 seg 错误。在此限制之前,它可以完美运行。提前感谢!

#include <stdio.h>
int main(){
  int n, num=501;
  int array[num-1][num-1];
  int p=((num+1)/2)-1;
  int count=25;
  int x;
    array[p][p]=1;
    array[p+1][p]=4;
    array[p+1][p+1]=3;
    array[p][p+1]=2;
    array[p-1][p+1]=9;
    array[p-1][p]=8;
    array[p-1][p-1]=7;
    array[p][p-1]=6;
    array[p+1][p-1]=5;  
    int i=10; 
  for (n=2;((n*2)+1)<=num;n++){

    for(x=0;x<n*2;x++){
       array[p+(x-(n-1))][p+n]=i;
       i++;
    }
    count+=(i-1);

    for(x=0;x<n*2;x++){
      array[p+n][p+(n-1)-x]=i;
      i++;
    }
          count+=(i-1);


    for(x=0;x<n*2;x++){
      array[p+((n-1)-x)][p-n]=i;
      i++;
    }
     i--;

        count+=i;
    for(x=0;x<=n*2;x++){
      array[p-n][p+(x-n)]=i;
      i++;
    }
        count+=(i-1);
 }
    printf("The answer is %lun", count);
}

我最好的猜测是,因为500*500*sizeof(int) == 1000000(假设sizeof (int) == 4),你已经用完了堆栈空间。 我建议把它放在堆上:

typedef struct { int array[num - 1][num - 1] } arr;
int main(void)
{
    const int num = 501;
    int n;
    arr *array;
    int p = (num + 1) / 2 - 1;
    int count = 25;
    int x;
    array = malloc(sizeof arr);
    array->array[p][p] = 1;
    array->array[p + 1][p] = 4;
.
.
.

相关内容

  • 没有找到相关文章

最新更新