JNA编程,遇到一个奇葩问题,参数初始化失败?

遇到一个非常奇怪的问题,我在一个类中定义的JNA 对象Pointer ,

public class Irp implements AutoCloseable {
    private final Pointer handle = new Memory(2L);

   public Irp() throws UnsupportedFormatException {
   }
}

我断点进来,发现 handle 尽然是allocated@0x0 (2 bytes)

0x0 是空指针的标识,也就是 这个对象初始化失败,怎么回事?? 明明new Memory(2)了,这个new memory(2L) 也是成功的 怎么handle 就是

0x0 空指针的呢? 而且handle的属性中只有size 2 是成功赋值的,peer(地址)没有 为0 ...有谁遇到过这个奇怪的问题

##** 最奇怪的是 单元测试没有遇到,只有走接口的时候会出现这个问题**

图片2

参数初始化失败了,看看你的日志呢,怎么初始化的。

该回答引用GPTᴼᴾᴱᴺᴬᴵ
根据您提供的代码和描述,无法确定问题的根本原因,但有一些可能的原因:

  1. 内存不足:可能是系统内存不足,导致无法成功分配内存。您可以尝试检查您的系统内存使用情况,并尝试重新启动应用程序或系统。

  2. 代码逻辑错误:您的代码可能存在逻辑错误,导致没有正确初始化 handle 对象。您可以尝试在代码中添加调试语句,打印出 handle 的值,并逐步调试代码以找出问题所在。

  3. JNA 版本问题:JNA 的版本可能与您的应用程序或系统不兼容,导致无法正确初始化 handle 对象。您可以尝试更新或降级 JNA 版本,并重新编译应用程序。

  4. 系统环境问题:您的系统环境可能存在一些问题,例如权限、文件系统等问题,导致无法正确初始化 handle 对象。您可以尝试在其他系统上运行代码,以确定是否存在此类问题。

综上所述,建议您在代码中添加调试语句并逐步调试代码,同时检查系统环境和 JNA 版本是否存在问题。如果问题仍然存在,请提供更多代码和详细信息,以便更好地帮助您解决问题。

有没有可能你断点的位置参数还没开始初始化呢

img


这里size没赋值?试下给size赋值看下

你这种创建对象有没有可能在虚拟机里,也就是jvm管辖的内存中只有一个地址,内存申请在了直接内存中,就像我们用allocateDirection