所以,下面的 java 代码在 finalize 期间会出现段错误。
public class Mpz_t extends com.sun.jna.Structure {
public int _mp_alloc;
public int _mp_size;
public NativeLongByReference _mp_d;
protected void initFieldOrder() {
setFieldOrder(new String[] { "_mp_alloc", "_mp_size", "_mp_d" });
}
public Mpz_t() {
super();
initFieldOrder();
allocateMemory();
ensureAllocated();
}
public static class ByReference extends Mpz_t implements
Structure.ByReference {
}
public static class ByValue extends Mpz_t implements
Structure.ByValue {
}
@Override public void finalize() {
Gmp.gmp().__gmpz_clear(this);
}
}
.__gmpz_clear()
据我所知,破坏了 C 端的结构。如果我撕掉那部分,就没有段错误,但我的代码会泄漏内存。有人对此有想法吗?
我可能会补充一点,它不可靠的段错误。在问题发生之前,它可能会正确破坏其中的 20 个结构。