我发现像
这样的免费区块private DoublyLinkedList freeblock = new DoublyLinkedList();
我在构造函数中初始化了freeblock。
freeblock.add(new DoublyLinkedList.Node(null, null, 0, initBlockSize));
我班级的方法之一,(下面是我方法的一部分。) 我得到空指针异常。我认为while循环有问题。任何人都可以帮我解决这个问题吗?
症状:java.lang.NullPointerException 在LinearMemPool.enlarge(LinearMemPool.java:220)
private void enlarge(int addSize) {
DoublyLinkedList.Node node = freeblock.head;
while (node.next != null) {
node = node.next;
}
}
答案 0 :(得分:1)
显然freeblock.head
为空。看看add
做了什么。
答案 1 :(得分:0)
您的enlarge
方法似乎有点危险。尝试将null
检查更改为:
private void enlarge(int addSize) {
DoublyLinkedList.Node node = freeblock.head;
while (node != null) {
node = node.next;
}
}
至于head
为null
的原因,我调试freeblock.add(...)
方法。
答案 2 :(得分:0)
首先检查一下freeblock.head是否为null,因为它很可能是:
if(node!=null){
while(node.next!=null){
....
}
else{
System.out.println("Freeblock is null but why.....");
}
如果freeblock.head可以为null,您可能应该正常执行此操作。仅用于清理目的:
void newMethod(Node node, int size){
if(node!=null)
enlarge(size);
else{
System.out.println("Freeblock is null");
}
}