
为什么数组变量定义放在main函数里面不行???(VC6++下用c语言编的)
structzb{doublex;doubley;};voidmain(){intn,i,j,t;doublesum1,sum2,sum3;structzbc[10000...
struct zb
{
double x;
double y;
};
void main()
{
int n,i,j,t;
double sum1,sum2,sum3;
struct zb c[1000002];
scanf("%d",&t);
for (j=0;j<t;j++)
{
sum1=sum2=sum3=0;
scanf("%d",&n);
for (i=1;i<n+1;i++)
scanf("%lf %lf",&(c[i].x),&(c[i].y));
c[n+1].x=c[1].x;
c[n+1].y=c[1].y;
for (i=1;i<n+1;i++)
{
sum1+=(c[i].x+c[i+1].x)*(c[i].x*c[i+1].y-c[i+1].x*c[i].y);
sum2+=(c[i].y+c[i+1].y)*(c[i].x*c[i+1].y-c[i+1].x*c[i].y);
sum3+=c[i].x*c[i+1].y-c[i+1].x*c[i].y;
}
c[0].x=sum1/(3*sum3);
c[0].y=sum2/(3*sum3);
printf("%.2lf %.2lf\n",c[0].x,c[0].y);
}
}程序编译通过了但执行时出错
而改成把数组变量定义成全局变量就没问题
struct zb
{
double x;
double y;
};
struct zb c[1000002];
void main()
{
int n,i,j,t;
double sum1,sum2,sum3;
scanf("%d",&t);
for (j=0;j<t;j++)
{
sum1=sum2=sum3=0;
scanf("%d",&n);
for (i=1;i<n+1;i++)
scanf("%lf %lf",&(c[i].x),&(c[i].y));
c[n+1].x=c[1].x;
c[n+1].y=c[1].y;
for (i=1;i<n+1;i++)
{
sum1+=(c[i].x+c[i+1].x)*(c[i].x*c[i+1].y-c[i+1].x*c[i].y);
sum2+=(c[i].y+c[i+1].y)*(c[i].x*c[i+1].y-c[i+1].x*c[i].y);
sum3+=c[i].x*c[i+1].y-c[i+1].x*c[i].y;
}
c[0].x=sum1/(3*sum3);
c[0].y=sum2/(3*sum3);
printf("%.2lf %.2lf\n",c[0].x,c[0].y);
}
}
为什么啊????尝试过在把第一个程序的数组改小一点改成c[10002],就又可以了,这又是为什么?? 展开
{
double x;
double y;
};
void main()
{
int n,i,j,t;
double sum1,sum2,sum3;
struct zb c[1000002];
scanf("%d",&t);
for (j=0;j<t;j++)
{
sum1=sum2=sum3=0;
scanf("%d",&n);
for (i=1;i<n+1;i++)
scanf("%lf %lf",&(c[i].x),&(c[i].y));
c[n+1].x=c[1].x;
c[n+1].y=c[1].y;
for (i=1;i<n+1;i++)
{
sum1+=(c[i].x+c[i+1].x)*(c[i].x*c[i+1].y-c[i+1].x*c[i].y);
sum2+=(c[i].y+c[i+1].y)*(c[i].x*c[i+1].y-c[i+1].x*c[i].y);
sum3+=c[i].x*c[i+1].y-c[i+1].x*c[i].y;
}
c[0].x=sum1/(3*sum3);
c[0].y=sum2/(3*sum3);
printf("%.2lf %.2lf\n",c[0].x,c[0].y);
}
}程序编译通过了但执行时出错
而改成把数组变量定义成全局变量就没问题
struct zb
{
double x;
double y;
};
struct zb c[1000002];
void main()
{
int n,i,j,t;
double sum1,sum2,sum3;
scanf("%d",&t);
for (j=0;j<t;j++)
{
sum1=sum2=sum3=0;
scanf("%d",&n);
for (i=1;i<n+1;i++)
scanf("%lf %lf",&(c[i].x),&(c[i].y));
c[n+1].x=c[1].x;
c[n+1].y=c[1].y;
for (i=1;i<n+1;i++)
{
sum1+=(c[i].x+c[i+1].x)*(c[i].x*c[i+1].y-c[i+1].x*c[i].y);
sum2+=(c[i].y+c[i+1].y)*(c[i].x*c[i+1].y-c[i+1].x*c[i].y);
sum3+=c[i].x*c[i+1].y-c[i+1].x*c[i].y;
}
c[0].x=sum1/(3*sum3);
c[0].y=sum2/(3*sum3);
printf("%.2lf %.2lf\n",c[0].x,c[0].y);
}
}
为什么啊????尝试过在把第一个程序的数组改小一点改成c[10002],就又可以了,这又是为什么?? 展开
2个回答
展开全部
全局变量和局部变量不在同一片存储区,栈的连续空闲内存不足以容纳c[100002](太大,但是可以容纳10002,所以你后面改成10002就行了),所以放在main中运行时出错,移为全局数组,存储在全局存储区,有足够的内存保存,所以运行OK..
因为没有语法问题,所以编译是OK的.
因为没有语法问题,所以编译是OK的.
本回答被提问者采纳
展开全部
呵呵,很简单,你申请的内存太大了,操作系统分配不出来
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询