在我为欧拉项目中的问题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;
.
.
.