智能车制作

 找回密码
 注册

扫一扫,访问微社区

查看: 2889|回复: 13
打印 上一主题 下一主题

数组越界问题 subscript out of range

[复制链接]

54

主题

837

帖子

0

精华

跨届大侠

Rank: 10Rank: 10Rank: 10

积分
7499
威望
5069
贡献
1876
兑换币
1028
注册时间
2014-1-5
在线时间
277 小时
跳转到指定楼层
1#
发表于 2015-3-6 19:23:41 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
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???

回复

使用道具 举报

32

主题

3009

帖子

0

精华

杰出人士

学期班的来卖萌?

Rank: 12Rank: 12Rank: 12

积分
14832

在线王奖章活跃会员奖章优秀会员奖章论坛元老奖章资源大师奖章

威望
5952
贡献
3172
兑换币
4257
注册时间
2013-11-26
在线时间
2854 小时
2#
发表于 2015-3-6 19:47:43 | 只看该作者
:L:L数组是从0开始的。128个数字,最后一个是127.。。。

评分

1

查看全部评分

回复 支持 反对

使用道具 举报

54

主题

837

帖子

0

精华

跨届大侠

Rank: 10Rank: 10Rank: 10

积分
7499
威望
5069
贡献
1876
兑换币
1028
注册时间
2014-1-5
在线时间
277 小时
3#
 楼主| 发表于 2015-3-6 19:57:21 | 只看该作者
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循环,还是有这个问题,就是说不应该是这个赋值时出了错吧
回复 支持 反对

使用道具 举报

54

主题

837

帖子

0

精华

跨届大侠

Rank: 10Rank: 10Rank: 10

积分
7499
威望
5069
贡献
1876
兑换币
1028
注册时间
2014-1-5
在线时间
277 小时
4#
 楼主| 发表于 2015-3-6 19:57:59 | 只看该作者
zhou1994 发表于 2015-3-6 19:47
数组是从0开始的。128个数字,最后一个是127.。。。

方便留个QQ么?
1398532038  方便的话加一下吧  谢谢
回复 支持 反对

使用道具 举报

32

主题

3009

帖子

0

精华

杰出人士

学期班的来卖萌?

Rank: 12Rank: 12Rank: 12

积分
14832

在线王奖章活跃会员奖章优秀会员奖章论坛元老奖章资源大师奖章

威望
5952
贡献
3172
兑换币
4257
注册时间
2013-11-26
在线时间
2854 小时
5#
发表于 2015-3-6 20:03:21 | 只看该作者
板正的 发表于 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.懂了?
回复 支持 反对

使用道具 举报

54

主题

837

帖子

0

精华

跨届大侠

Rank: 10Rank: 10Rank: 10

积分
7499
威望
5069
贡献
1876
兑换币
1028
注册时间
2014-1-5
在线时间
277 小时
6#
 楼主| 发表于 2015-3-6 20:09:47 | 只看该作者
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已经溢出呢?

麻烦再给讲一下吧  谢谢
回复 支持 反对

使用道具 举报

54

主题

837

帖子

0

精华

跨届大侠

Rank: 10Rank: 10Rank: 10

积分
7499
威望
5069
贡献
1876
兑换币
1028
注册时间
2014-1-5
在线时间
277 小时
7#
 楼主| 发表于 2015-3-6 20:12: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].
回复 支持 反对

使用道具 举报

32

主题

3009

帖子

0

精华

杰出人士

学期班的来卖萌?

Rank: 12Rank: 12Rank: 12

积分
14832

在线王奖章活跃会员奖章优秀会员奖章论坛元老奖章资源大师奖章

威望
5952
贡献
3172
兑换币
4257
注册时间
2013-11-26
在线时间
2854 小时
8#
发表于 2015-3-6 20:18:41 | 只看该作者
板正的 发表于 2015-3-6 20:12
到最后一次while循环时,a=1,此时进入循环,a=0,所以127-a还是127,就是说这个数组的最后一个数是me_cc ...

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

使用道具 举报

54

主题

837

帖子

0

精华

跨届大侠

Rank: 10Rank: 10Rank: 10

积分
7499
威望
5069
贡献
1876
兑换币
1028
注册时间
2014-1-5
在线时间
277 小时
9#
 楼主| 发表于 2015-3-6 20:20:38 | 只看该作者
zhou1994 发表于 2015-3-6 20:18
。。。我真的快无语了。while循环最后一个是127,这就是数组的最后一个数了,后来怎么就成128了。我建议你 ...

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

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

也是找了C语言书看这个部分,但是还是没想明白。。。。
回复 支持 反对

使用道具 举报

32

主题

3009

帖子

0

精华

杰出人士

学期班的来卖萌?

Rank: 12Rank: 12Rank: 12

积分
14832

在线王奖章活跃会员奖章优秀会员奖章论坛元老奖章资源大师奖章

威望
5952
贡献
3172
兑换币
4257
注册时间
2013-11-26
在线时间
2854 小时
10#
发表于 2015-3-6 20:28:54 | 只看该作者
板正的 发表于 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啊,你要是不懂,就多看看,不然到后面,估计你看不懂的地方还多
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

关于我们|联系我们|小黑屋|智能车制作 ( 黑ICP备2022002344号

GMT+8, 2025-1-1 14:51 , Processed in 0.052119 second(s), 29 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表