0

每当我编译下面的代码时,它都会给出java.lang.NullPointerException错误。我查看了我的代码,但它似乎是正确的。是编译器坏了还是我错过了什么?

 public byte[][] divi(byte[] pac, int pac_len){
      int set = 0 ;
      byte [][] data = null;

      for( int i= 0 ; set != pac_len; i++) { 
           if (set + 33 <= pac_len) {
                data[i] = new byte[33];
                System.arraycopy(pac, set, data[i], 0, 33);
           }
       }
  }
4

2 回答 2

9

当然你错过了一些东西:作业

byte [][] data = null;

明确分配nulldata. 之后,您对 进行分配data[i],这会导致NullPointerException.

将上面的行重写为

byte [][] data = new byte[][pac_len];

应该解决NPE问题。

它不会解决无限循环问题 - 您需要为此调整set变量。目前,set不会改变,所以循环是无限的。看起来您的代码正试图将一个长数组分成 33 字节的块。您需要特别注意pac_len不能被 33 整除的情况,因为循环条件必须set完全正确pac_len才能退出。

于 2013-05-05T10:09:22.843 回答
1

首先,NPE是一个运行时异常,你不会在编译时得到它。

其次,您分配nulldata然后您尝试访问它。当然是NPE这样。

第三,在你解决了上面提到的两个问题之后,你应该修复你的循环:for( int i= 0 ; set != pac_len; i++)

在这个循环中你的条件不好。i可能会超出数组边界,这可能会导致您出现ArrayOutOfBoundException,您应该确保i永远不会超过数组的长度(您的循环是无限的..)

于 2013-05-05T10:12:00.413 回答