TC官方合作论坛

 找回密码
 立即注册
查看: 2979|回复: 10

[问题] 数组调用超过越界,求解答

[复制链接]
发表于 2012-2-8 22:22:54 | 显示全部楼层 |阅读模式

马上加入TC

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
代码如下:功能   逻辑型  传送(string 原地图)//返回真为地图相符,假为不符
int x,y
int n=0,m=1,a=0,计数
string[]   Cmap=string[5]
string[][] map=string[4][7]

//曙光前哨站传送机能到达的地图,map[][0]用于判断传送机地图

map[0][0]="曙光前哨站"

map[0][1]="太阳城"

//太阳城传送机能到达的地图

map[1][0]="太阳城"
        map[1][1]="曙光前哨站"
        map[1][2]="迷雾湿地"
        map[1][3]="寂灭荒原"
        map[1][4]="巨龙谷"
        map[1][5]="叹息之地"
        map[1][6]="风暴城"
        //叹息之地传送机能到达的地图
        map[2][0]="叹息之地"
        map[2][1]="太阳城"
        map[2][2]="寂灭荒原"
        map[2][3]="巨龙谷"
        map[2][4]="陨石旷野"
        map[2][5]="风暴城"
        //风暴城传送机能到达的地图
        map[3][0]="风暴城"
        map[3][1]="太阳城"
        map[3][2]="叹息之地"
        map[3][3]="陨石旷野"
        map[3][4]="毒液废墟"
        map[3][5]="烈日血原"
        map[3][6]="极北口岸"

string 副地图,现地图=Dm.GetWords(865,6,974,24,"fcfcfc-202020",1.0)
        计数=Dm.GetWordResultCount(现地图)
        副地图=Dm.GetWordResultStr(现地图,计数-1)

help.messagebox(副地图)
if(str.strcompare(副地图,现地图)!=0)  //如果不是目标地图执行以下代码

while(n<4)
            while(str.strcompare(map[n][m]," ")!=0&& m<7 && str.strcompare(副地图,现地图)!=0)
                if(str.strcompare(副地图,map[n][m])==0)
                    Cmap[a]=map[n][m]
                    副地图=map[n][0]
                    help.messagebox(map[n][m])
                else

    m=m+1
                endif
            endwhile
            n=n+1
            m=1
        endwhile  
endif

返回  真
功能结束


程序运行后提示:数组调用超过越界


回复

使用道具 举报

发表于 2012-2-8 22:49:55 | 显示全部楼层
:smoke8成访问到了mpa[n][7]了
步进调试看看就知道了
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-2-8 22:57:39 | 显示全部楼层
回复 2楼超自然的帖子

可能是一个平台的BUG,参数传送之后就出问题了
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-2-8 22:58:48 | 显示全部楼层
功能   逻辑型  传送(string 原地图)

我测试了下调用这个功能时,参数传给(string 原地图)后,比较两个竟然是不一样的,
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-2-8 23:20:28 | 显示全部楼层
回复 2楼超自然的帖子

你说的是正确的把下面7改成6就是正常的
while(str.strcompare(map[n][m]," ")!=0&& m<7 && str.strcompare(副地图,现地图)!=0)

但是那样运行好像map[n][6]直接是没办法比较,算不算平台的问题还有个问题就是n为什么不越界,二维数组的问题?
回复 支持 反对

使用道具 举报

发表于 2012-2-9 11:59:24 | 显示全部楼层
:L不是什么7和6的问题,是你的wehile的问题,访问到了下标了
试试这样
string a=tring[3]
a[0]="eeeeee"
a[1]="QQQQQ"
a[2]="wwwww"
wehile (i<3)
i=i+1
help.messagebox(a[i-1])
endwhile
和这样
while (i<3)
help.messagebox(a)
i=i+1
endwhile

这两个你试试就会知道了
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-2-10 13:20:41 | 显示全部楼层
while只要条件是假就应该不会进行while内的运算才对,不关其他事,如果条件不符合还要传送到数组那就是平台的问题,
while (i<3)
help.messagebox(a)
i=i+1
endwhile
上面这个循环体内,只要wehile (i<3)不成立,就不应该去运行help.messagebox(a)这个代码才是对的,
i=3的时候,条件已经不成立,怎么可能去执行help.messagebox(a)这语句了,自然也应该没有a[3]这个超界的数组了,如果平台还去计算那肯定是平台的问题,
如果报错说明平台编写的代码有问题,应该他先去a是否越界,在去判断wehile (i<3)是否成立,顺序反了,至少在数组编写方面官方是有问题的

不过还是非常感谢你的回答,至少我的程序可以去运行了
回复 支持 反对

使用道具 举报

发表于 2012-2-10 16:53:01 | 显示全部楼层
回复 7楼sspray的帖子

while (i<3)
help.messagebox(a)
i=i+1
endwhile
在最后一次运行,即1=3的时候,实际上就是访问了a[3]
而string[] a=string[3]
只有
a[0]
a[1]
a[2]
三个元素,因此程序会在此报错,报数组越界

while (i<3)
i=i+1
help.messagebox(a[i-1])
endwhile
当i=3的时候实际是访问的a[2],因此不会越界
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-2-10 18:20:06 | 显示全部楼层
回复 8楼超自然的帖子

问题出来了:
如果i=3的话,while()条件已经不成立,为什么要去解析while()循环体内的语句help.messageBox()呢?
回复 支持 反对

使用道具 举报

发表于 2012-2-10 18:50:58 | 显示全部楼层
回复 9楼sspray的帖子

这问题我跟老大说过,后来忙,也没跟进
while (1<b)
照我的理解,不应该走到i=b
可实际上,会走到i=b才停止,因为while本身无法判断下一步是不是绝对<b,所以只能到=b的时候才停
回复 支持 反对

使用道具 举报

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

本版积分规则

关闭

推荐上一条 /2 下一条

关闭

小黑屋|TC官方合作论坛 (苏ICP备18045623号)

GMT+8, 2024-9-29 02:04 , Processed in 0.042580 second(s), 23 queries .

Powered by 海安简单软件服务部

© 2008-2019 版权所有 保留所有权利

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