浏览:1822008-04-26 10:53   来自蓝色的风之精灵      :

感觉所有的报错都集中在LumaQQ.NET.Utils.Crypter这个类的方法里。昨天我还看到一个“神奇”的错误提示

            for (int i = 1; i <= pos; i++)
            {
                plain[i] = (byte)(Rand() & 0xFF);//这里报错,提示下标越界
            }

怎么会越界呢,回溯上去,可以看到 plain = new byte[8];
那么就是i大于等于8了?i被限制必须小于pos,那么pos是多少?

继续回溯上去 

pos = (len + 0x0A) % 8;//除以8的余数,那么只能是0-7
            if (pos != 0)//当不为0时
                pos = 8 - pos;//取值范围1-7

pos无论如何不会等于8的。那么这个神奇的出错是怎么来的……难道是多个线程间互串了?

楼主
  2周前   阿不      :
这个类的问题看似比较多。
回复  1楼 回到顶楼 
  2周前   阿不      :
你能把详细的异常信息发到我邮箱里面来吗?
包括所有的堆栈信息。。。
回复  2楼 回到顶楼 
  2周前   蓝色的风之精灵      :
抱歉,我现在的程序是写成Windows service在服务器上跑的,只打印了错误提示的ErrorMessage,不知道怎么打印堆栈信息……
只有如下这样的错误信息:
2008-4-25 18:10:25 Destination array was not long enough. Check destIndex and length, and the array's lower bounds.
2008-4-25 18:10:25 at System.Array.Copy(Array sourceArray, Int32 sourceIndex, Array destinationArray, Int32 destinationIndex, Int32 length, Boolean reliable)
at System.Array.Copy(Array sourceArray, Int32 sourceIndex, Array destinationArray, Int32 destinationIndex, Int32 length)
at LumaQQ.NET.Utils.Crypter.Encrypt8Bytes()
at LumaQQ.NET.Utils.Crypter.Encrypt(Byte[] inData, Int32 offset, Int32 len, Byte[] k)
at LumaQQ.NET.Packets.BasicOutPacket.EncryptBody(Byte[] buf, Int32 offset, Int32 length)
at LumaQQ.NET.Packets.OutPacket.Fill(ByteBuffer buf)
at LumaQQ.NET.Net.Sockets.SocketConnection.FillBytebuf(OutPacket outPacket, ByteBuffer sendBuf)
at LumaQQ.NET.Net.Sockets.SocketConnection.BeginSendData(ProxySocket socket, OutPacket outPacket)
回复  3楼 回到顶楼 
  2周前   阿不      :
会不会是length为0问题呢/
回复  4楼 回到顶楼 
  2周前   阿不      :
这个跟线程安全没有关系吧?每一次使用都是独立的
回复  5楼 回到顶楼 
  2周前   蓝色的风之精灵      :
3楼的只是说明下我的log的样子,3楼的并不是我帖子的那个错误的报错信息。顶楼的错误是一次我用调试模式启动程序是看到的,所以有行号提示,我找到哪一行看到的代码就是 plain[i] = (byte)(Rand() & 0xFF);
回复  6楼 回到顶楼 
  2周前   阿不      :
连行号都没有,我都不知道在哪一句出错了。
回复  7楼 回到顶楼 
  1周前   阿不      :
这个类不是线程安全的。
回复  8楼 回到顶楼 

你还不是小组成员,加入小组以后才能发布新主题!
> 返回“LumaQQ.NET”


其他话题

1 31040