TC官方合作论坛
标题:
数组调用超过越界,求解答
[打印本页]
作者:
sspray
时间:
2012-2-8 22:22
标题:
数组调用超过越界,求解答
代码如下:功能 逻辑型 传送(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
:smoke8成访问到了mpa[n][7]了
步进调试看看就知道了
作者:
sspray
时间:
2012-2-8 22:57
回复
2楼
超自然
的帖子
可能是一个平台的BUG,参数传送之后就出问题了
作者:
sspray
时间:
2012-2-8 22:58
功能 逻辑型 传送(string 原地图)
我测试了下调用这个功能时,参数传给(string 原地图)后,比较两个竟然是不一样的,
作者:
sspray
时间:
2012-2-8 23:20
回复
2楼
超自然
的帖子
你说的是正确的把下面7改成6就是正常的
while(str.strcompare(map[n][m]," ")!=0&& m<7 && str.strcompare(副地图,现地图)!=0)
但是那样运行好像map[n][6]直接是没办法比较,算不算平台的问题还有个问题就是n为什么不越界,二维数组的问题?
作者:
超自然
时间:
2012-2-9 11:59
: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
这两个你试试就会知道了
作者:
sspray
时间:
2012-2-10 13:20
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
回复
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],因此不会越界
作者:
sspray
时间:
2012-2-10 18:20
回复
8楼
超自然
的帖子
问题出来了:
如果i=3的话,while()条件已经不成立,为什么要去解析while()循环体内的语句help.messageBox()呢?
作者:
超自然
时间:
2012-2-10 18:50
回复
9楼
sspray
的帖子
这问题我跟老大说过,后来忙,也没跟进
while (1<b)
照我的理解,不应该走到i=b
可实际上,会走到i=b才停止,因为while本身无法判断下一步是不是绝对<b,所以只能到=b的时候才停
作者:
sspray
时间:
2012-2-10 19:11
回复
10楼
超自然
的帖子
我的理解
实际上,会走到i=b才停止,while()运行的时候应该是判断i=b的时候就不进行循环体内的代码,
至少C还是VC++都是这么判断的,所以我觉得应该是TC在数组这块代码没写好,没有判断到各种特殊情况
写了两天代传送,早上都已经完全运行OK了,下午在调用又是这个问题,感觉无助,超级郁闷,
欢迎光临 TC官方合作论坛 (http://bbs.52tc.co/)
Powered by Discuz! X3.1