Method Memory.dispose() frees the peer and sets it to 0. Afterwards it calls allocatedMemory.remove(this). This call does not find the Memory in the map: Memory is a subclass of Pointer which uses the peer for hashcode() and equals() and therefore "this" is no longer equal to the Memory that was put in the map.
This bug is easy to fix by first calling allocatedMemory.remove(this) and then setting the peer to 0.
Method Memory.dispose() frees the peer and sets it to 0. Afterwards it calls allocatedMemory.remove(this). This call does not find the Memory in the map: Memory is a subclass of Pointer which uses the peer for hashcode() and equals() and therefore "this" is no longer equal to the Memory that was put in the map.
This bug is easy to fix by first calling allocatedMemory.remove(this) and then setting the peer to 0.