为什么我用C语言编写的程序编译成功没有出错却无法运行呢?求高手指点!

#include"stdio.h"#include"time.h"#include"stdlib.h"voidmain(){inti;doubleerr[501],B,W... #include "stdio.h"
#include "time.h"
#include "stdlib.h"
void main()
{
int i;
double err[501],B,W[501],W2[501],j,beta[500];
W[0]=50*1000/3600*0.286;
B=W[0]/5;
for(i=1;i<=501;i++)
{
W[i]=W[i-1]-B*0.01;
}
srand((unsigned)time(0));
for(i=0;i<502;i++)
{
err[i]=rand()/(double)RAND_MAX;
err[i]*=B;
err[i]*=0.0001;
j=rand()/(double)RAND_MAX;
if(j<0.5)
err[i]*=(-1.0);
}
for(i=1;i<502;i++)
{
W2[i]=W[i]+err[i];
}
for(i=0;i<501;i++)
{
beta[i]=(W2[i]-W2[i+1])/0.01;
}
}
就是这样^
展开
 我来答
chenhaohbu
2010-08-14 · TA获得超过601个赞
知道小有建树答主
回答量:95
采纳率:0%
帮助的人:57.9万
展开全部
如果你的循环中的i值变化范围没有问题,则修改你的数组定义为:
double err[502],B,W[502],W2[502],j,beta[501];
你的原始定义都少了一个数组元素,会导致下标越界,进而引发运行时错误。
abbcwho
2010-08-14 · TA获得超过559个赞
知道答主
回答量:82
采纳率:0%
帮助的人:93.3万
展开全部
double W2[501]
数组的下标从0到500
最后一个循环
for(i=0;i<501;i++)
{
beta[i]=(W2[i]-W2[i+1])/0.01;
}
当i==500时,访问了W2[501],下标越界
err[]在前面的循环里也有越界情况

C编译器,编译时只检查是否存在语法错误,运行时才发现访问越界。
当然还有些编译器,运行时都不会发现错误,直接访问残值,就更危险了。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式