找回密码
 点一下
查看: 1203|回复: 6

用哈希表储存的单位被杀死后退出魔兽会弹错?

[复制链接]
发表于 2010-10-7 22:57:23 | 显示全部楼层 |阅读模式
如题,我这样步兵方阵
loop
exitwhen i<-5
   set j=7
   loop
   exitwhen j<-7
       if i>4 or i<-4 then
           set uid='orai'
       else
           set uid='ogru'
       endif
       if i!=0 and j!=0 then
         set you=CreateUnit(Player(1),uid,x+dist*j,y+dist*i,0)
         if cout>0 and i==5 or i==-5 then
              call SaveUnitHandle(udg_HT,GetHandleId(udg_HT),StringHash("wolf")+cout,you)//就是这一句,我用主角把他们全杀光后,退出游戏就弹错了。
              set cout=cout-1
         endif
         call SetUnitMoveSpeed(you,200)
         set you=null
       endif
       set j=j-1
   endloop
set i=i-1
endloop
 楼主| 发表于 2010-10-7 23:33:29 | 显示全部楼层
经过多次试验,发现如在刷兵的时候把单位的handle用哈希表存放在某个单位上,然后把小兵杀光,退出游戏后久可能会弹错,这怎么回事?难道是我没有及时清除掉哈希表残留吗?
回复

使用道具 举报

 楼主| 发表于 2010-10-8 00:48:37 | 显示全部楼层
问题貌似已经解决,经过多方试验,发现用哈希表这个全局变量储存的单位死亡的话会在退出魔兽的时候抬出错误,于是乎我把哈希表变量改成了某个全局单位变量,发现就可以了,汗,以后也不GetHandleId(udg_HT)了。。。
回复

使用道具 举报

发表于 2010-10-8 03:44:46 | 显示全部楼层
GetHandleId(udg_HT)有什么错么? 话说我看到这一句时稍稍有些头皮发麻...
如果母键实在没什么好写的,写个0不就完事了么...
回复

使用道具 举报

 楼主| 发表于 2010-10-8 10:43:01 | 显示全部楼层
如果写数字的话我怕我在其他地方会忘记我曾经在(0,X)这里保存了东西。。。我都习惯绑定。。。。另外,我也不知道为什么GetHandleId(udg——HT)保存的小兵被杀过了一段时间后退出游戏弹错。。。。。
回复

使用道具 举报

发表于 2010-10-8 11:34:29 | 显示全部楼层
可能是内存溢出?单位死了一段时间这个单位就不存在了,这时候再去通过这个单位变量访问的话或许的确会出问题吧
回复

使用道具 举报

 楼主| 发表于 2010-10-8 19:38:12 | 显示全部楼层
可是我就只是杀死,没有再访问访问啊。。。。。。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 点一下

本版积分规则

Archiver|移动端|小黑屋|地精研究院

GMT+8, 2024-6-27 06:16 , Processed in 0.029854 second(s), 18 queries .

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

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