为什么数组变量定义放在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],就又可以了,这又是为什么??
展开
 我来答 举报
ggdmdf
2008-04-02 · TA获得超过1520个赞
知道小有建树答主
回答量:1024
采纳率:0%
帮助的人:1269万
展开全部
全局变量和局部变量不在同一片存储区,栈的连续空闲内存不足以容纳c[100002](太大,但是可以容纳10002,所以你后面改成10002就行了),所以放在main中运行时出错,移为全局数组,存储在全局存储区,有足够的内存保存,所以运行OK..

因为没有语法问题,所以编译是OK的.
本回答被提问者采纳
8 已赞过 已踩过<
你对这个回答的评价是?
评论 举报 收起
乐正涵柳3
2008-04-02 · TA获得超过952个赞
知道小有建树答主
回答量:650
采纳率:100%
帮助的人:706万
展开全部
呵呵,很简单,你申请的内存太大了,操作系统分配不出来
抢首赞 已赞过 已踩过<
你对这个回答的评价是?
评论 举报 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式