堆栈上溢的问题

周末给数据包对象加了一个对战信息的字段后,有几率的出现【堆栈上溢】或者是 【RangeError: Error #2006: 提供的索引超出范围。】 的错误。

具体结果2种:

1.数据包该字段的数值实际为其他字段的字段名或其他字段的数值。

2.直接报错,程序退出。

这里以一个4字节长度的数值字段举例:发送的数据包中的某个字段中的数据本应是4个字节长度的,但是该字段由于某些原因没有被赋值,实际为null。既:数据包解析器要解析4个字节长度的数据,但是实际数据为null,长度不为4. 这时数据包解析器认为当前的数据没有解析完毕,开始等待新的数据流,而新的数据流实际又是另一个数据包中的数据。这时就会产生递归死循环。

实际上这其实是一个人为的可以避免的错误。首先给 Object对象的动态属性赋值是一个逃避编译器的错误校验的,因此编译程序的时候编译器无法检测到Object对象的某一属性值为null。解决方法就是给数据包也编译一个反射类,并判断个属性是否为null。

ps:突然觉得做一个ui管理器和event管理器很有必要啊。晚上搞定它吧。

发表评论

电子邮件地址不会被公开。 必填项已用*标注

This site uses Akismet to reduce spam. Learn how your comment data is processed.