そのため、ファイナライズ中に以下の Java コード segfaults が発生します。
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側の構造体を破壊します。その部分を切り取ると、segfault は発生しませんが、コードでメモリ リークが発生します。誰でもこれについてアイデアがありますか?
私はそれが確実にセグメンテーション違反をしないことを付け加えるかもしれません。問題が発生する前に、これらの構造体のうちおそらく 20 個を適切に破棄します。