智能车制作

标题: 数组越界问题 subscript out of range [打印本页]

作者: 板正的    时间: 2015-3-6 19:23
标题: 数组越界问题 subscript out of range
int16 me_ccd_sign_0[128] = {0};  
int16 me_ccd_sign_1[128] = {0};   
int16 me_ccd_sign_2[128] = {0};   

main()
{
  int16 a = 128;  
  while(a--)
  {
    me_ccd_clk_out(0);
    me_ccd_sign_0[127-a] = adc_once(me_ccd_sign,ADC_10bit);      //10位精度
    me_ccd_delay(1);

  }
me_ccd_sign_2[128] = me_ccd_sign_1[128];
  me_ccd_sign_1[128] = me_ccd_sign_0[128];
}


代码如上
为何在红字部分提示subscript out of range???


作者: zhou1994    时间: 2015-3-6 19:47
:L:L数组是从0开始的。128个数字,最后一个是127.。。。
作者: 板正的    时间: 2015-3-6 19:57
zhou1994 发表于 2015-3-6 19:47
数组是从0开始的。128个数字,最后一个是127.。。。

128个数的数组,不就是从0到127么?

你是说while(a--)的问题对么?  这个我看过了,第一次进入while循环,这时的a已经是127而不是128,所以me_ccd_sign_0[127-a]就是从0开始的。

我也试过将while(a--)改为for循环,还是有这个问题,就是说不应该是这个赋值时出了错吧

作者: 板正的    时间: 2015-3-6 19:57
zhou1994 发表于 2015-3-6 19:47
数组是从0开始的。128个数字,最后一个是127.。。。

方便留个QQ么?
1398532038  方便的话加一下吧  谢谢

作者: zhou1994    时间: 2015-3-6 20:03
板正的 发表于 2015-3-6 19:57
128个数的数组,不就是从0到127么?

你是说while(a--)的问题对么?  这个我看过了,第一次进入while ...

me_ccd_sign_2[128] = me_ccd_sign_1[128];
me_ccd_sign_1[128] = me_ccd_sign_0[128];
这两句。你要把最后一个数据进行赋值。128已结溢出了,只有到127.懂了?

作者: 板正的    时间: 2015-3-6 20:09
zhou1994 发表于 2015-3-6 20:03
me_ccd_sign_2[128] = me_ccd_sign_1[128];
me_ccd_sign_1[128] = me_ccd_sign_0[128];
这两句。你要把 ...

不好意思  还是没看懂。。。

为什么128已经溢出呢?

麻烦再给讲一下吧  谢谢

作者: 板正的    时间: 2015-3-6 20:12
本帖最后由 板正的 于 2015-3-6 20:18 编辑
zhou1994 发表于 2015-3-6 20:03
me_ccd_sign_2[128] = me_ccd_sign_1[128];
me_ccd_sign_1[128] = me_ccd_sign_0[128];
这两句。你要把 ...

到最后一次while循环时,a=1,此时进入循环,a=0,所以127-a还是127,就是说这个数组的最后一个数是me_ccd_sign_0[127].

作者: zhou1994    时间: 2015-3-6 20:18
板正的 发表于 2015-3-6 20:12
到最后一次while循环时,a=1,此时进入循环,a=0,所以127-a还是127,就是说这个数组的最后一个数是me_cc ...

。。。我真的快无语了。while循环最后一个是127,这就是数组的最后一个数了,后来怎么就成128了。我建议你去复习一下你的c语言,自然就懂了。

作者: 板正的    时间: 2015-3-6 20:20
zhou1994 发表于 2015-3-6 20:18
。。。我真的快无语了。while循环最后一个是127,这就是数组的最后一个数了,后来怎么就成128了。我建议你 ...

刚才打错了   最后一个数是127,刚刚发现改过来了。

既然while最后一个是127,为什么会溢出?给127赋值难道不对么?

也是找了C语言书看这个部分,但是还是没想明白。。。。

作者: zhou1994    时间: 2015-3-6 20:28
板正的 发表于 2015-3-6 20:20
刚才打错了   最后一个数是127,刚刚发现改过来了。

既然while最后一个是127,为什么会溢出?给127赋值 ...

me_ccd_sign_2[128] = me_ccd_sign_1[128];
me_ccd_sign_1[128] = me_ccd_sign_0[128];
你这明明是128啊,你要是不懂,就多看看,不然到后面,估计你看不懂的地方还多

作者: 板正的    时间: 2015-3-6 20:34
zhou1994 发表于 2015-3-6 20:28
me_ccd_sign_2[128] = me_ccd_sign_1[128];
me_ccd_sign_1[128] = me_ccd_sign_0[128];
你这明明是128啊 ...

哈哈   我明白你说的意思了


是我弄错了

我原意是:将数组0是最新采集的数,然后数组0的数给数组1,将数组1的数给数组2,从而得到三个数组,目的是进行简单的滤波,(以前的简单滤波就是这样滚动赋值,但是那时候是数而不是数组)。我想讲数组0直接给数组1,所以就把他的名字直接赋值了me_ccd_sign_1[128] = me_ccd_sign_0[128];  所以才犯了这种低级错误。。。




谢谢你的解答




哈哈  我估计你刚才抓狂了    唉   自己钻到牛角尖里了。。。

作者: 板正的    时间: 2015-3-6 20:37
zhou1994 发表于 2015-3-6 20:28
me_ccd_sign_2[128] = me_ccd_sign_1[128];
me_ccd_sign_1[128] = me_ccd_sign_0[128];
你这明明是128啊 ...

等会儿通知版主把这个帖子删了吧,让人看了笑话、、、、、、

作者: zhou1994    时间: 2015-3-6 20:47
板正的 发表于 2015-3-6 20:34
哈哈   我明白你说的意思了

还好我在看电影,心情不错

作者: 板正的    时间: 2015-3-6 20:48
zhou1994 发表于 2015-3-6 20:47
还好我在看电影,心情不错



哈哈   不抓紧做车么  怎么还看电影?坐等国特了?





欢迎光临 智能车制作 (http://dns.znczz.com/) Powered by Discuz! X3.2