找回密码
 点一下
楼主: linzefei

Union Bug 1个需要注意的地方

[复制链接]
 楼主| 发表于 2009-5-5 22:49:24 | 显示全部楼层
32楼 那结论 仍是回到 触发器占handle
回复

使用道具 举报

发表于 2009-5-6 08:32:54 | 显示全部楼层
差不多吧
应该是触发器的事件响应占的
恩,做一下总结:
handle方面:
1、当我们创建一个新的handle(不是特殊的那几个)它会从handle表中占用一个位置
2、如果此时handle表已满,那么它会占用当前的最大值+1的位置
3、如果未满,那么它会从最大值开始寻找,知道找到一个空位并占用。
4、当handle值的连接数清零后,handle会在当前函数结束后清除。(猜测)
unionbug方面:
1、如果最后声明的是handle型,那么最后要设为null(0)否则会有内存泄漏
2、如果是整数,则没有泄露
3、当最后是整数时,新创建的handle的连接数是0,
回复

使用道具 举报

发表于 2009-5-6 15:04:42 | 显示全部楼层
引用第39楼疯人¢衰人于2009-05-05 22:25发表的  :
以上是研究handle的
……

别理他~~某些人土起来就爱胡扯两句~~等你跟他说明Union Bug的优势的时候他就又会说“反正我就是爱Return Bug讨厌Union Bug怎地”~~这时候就更加无聊了~~
回复

使用道具 举报

发表于 2009-5-6 17:59:11 | 显示全部楼层
引用第35楼血戮魔动冰于2009-05-05 18:30发表的  :
还有……如果:
[jass]local unit udg_u = ...
local integer udg_i[/jass]
这样,按头目的说法……先运行第一行:udg_u指向的unit的变量链接数+1
然后运行第二行:udg_i引发Union_bug,公用空间变为integer。
.......
可能是我没说清楚………………
就是说,一个handle的变量连接数为n。
执行以上代码后,
情况是:
1.(我觉得是这样)
handle的变量连接数变为n+1,后面变成无害的integer空间时,又变成了n。
2.
从头到尾handle的变量连接数就没变过。

如果是1的情况,那么,handle不跟踪这个空间(变量),是不是就是说,类似于变量被赋为null,原变量的变量连接数-1的情况呢?

看了头目的贴……可是最近编程都编脑残了……理解不能…………

似乎此Bug不能用于扰乱handleTable…………
回复

使用道具 举报

发表于 2009-5-6 18:16:03 | 显示全部楼层
……
你还是没有懂啊
第一个声明
相当于正常的声明和一个赋值
比如
local Location udg_l = udg_ll
相当于
local Location udg_l
set udg_l = udg_ll
这样明显连接数+1
然后第二个声明
local integer udg_i = 0
相当于
local integer udg_i
set udg_i = 0
set ugg_l = I2H(0)
这样
按你说的
效果是udg_ll的handle连接+1了
而handle 0 的没变
回复

使用道具 举报

发表于 2009-5-7 17:00:59 | 显示全部楼层
set ugg_l = I2H(0)
执行这步时,udg_I的前一个指向的handle的变量连接数就-1了吧~~
回复

使用道具 举报

 楼主| 发表于 2009-5-7 20:52:30 | 显示全部楼层
恩.
.``
回复

使用道具 举报

发表于 2009-5-7 21:12:09 | 显示全部楼层
其实头目说要用unionBug的主要原因是I2H类的东西不会因为这玩意产生handle。

不过我本身是一个I2H抵制者,因为I2H在we中实际上没有意义,而且会因为保存地图而出错。

大概理论是这样:如果一个handle有一个以上的变量指向他,那么在读取游戏后依然会保持这个handle值,但是如果指向这个handle的变量是0,在读取以后,该单位的handle值未知。

我只是认为:不要过分干扰war3虚拟机,用H2I获取一些必要的信息就好了,然后把它转换成一个 array变量的下标
回复

使用道具 举报

 楼主| 发表于 2009-5-9 06:08:50 | 显示全部楼层
怎么我记得头目是说因为 unionBug效率高 可以群体转换 所以推荐~~
,因为I2H在we中实际上没有意义,而且会因为保存地图而出错。
似乎我测试过保存时 都没出错。。。正确读取到的。。

我刚特意测试了下
第1次游戏h2i某单位得到值
读取游戏 i2u那个得到的值 结果正确得到那个单位了。。
回复

使用道具 举报

发表于 2009-5-9 09:40:48 | 显示全部楼层
他说的不是I2u的问题
而是handle连接数一直为0(就是我说的在UNIONBUG里创建的handle)
的变量无法记录吧
以前有帖子说保存读取后handle变化了
回复

使用道具 举报

发表于 2009-5-9 10:34:16 | 显示全部楼层
lightning的handle一定会变化,其他handle则是可能变化,很多缓存地图保存后读取会出现诡异问题就这个原因
回复

使用道具 举报

 楼主| 发表于 2009-5-9 17:31:16 | 显示全部楼层
闪电的吗..我晚点测试下...
其他可能?
...难道没规律吗```
回复

使用道具 举报

 楼主| 发表于 2009-5-9 19:18:16 | 显示全部楼层
貌似没变..也许我测试错了...eff给个演示看看?
回复

使用道具 举报

发表于 2009-5-10 08:59:39 | 显示全部楼层
橙头像一变再变啊
回复

使用道具 举报

发表于 2009-5-21 08:50:12 | 显示全部楼层
都是高手。。。
回复

使用道具 举报

发表于 2009-5-21 11:26:12 | 显示全部楼层
实际上lightning在读取地图后根本不存在
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-26 00:09 , Processed in 0.166120 second(s), 17 queries .

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

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