我有一个指向记忆的指针,如:
Pointer pData = new Memory(65536);
我需要从位置8开始获取该内存的指针,因为我想将内存的一部分(从8到65535)发送到本机C API。
我用过:
pData8 = pData.getPointer(8);
从位置8开始获取指针,然后我尝试使用:
将内容写入pData8pData8.setInt(0xAAAA);
只是为了验证我写的是正确的位置,但我得到错误:内存访问无效。
如何获取指向内存部分的有效指针并能够在其上书写?
下面的详细信息:
80 Pointer pM = new Memory(65536);
81 Pointer p = pM.getPointer(4);
82 pM.setInt(0, 0xFFFF);
83 p.setInt(0, 0xBBBB);
Exception in thread "main" java.lang.Error: Invalid memory access
at com.sun.jna.Native.setInt(Native Method)
at com.sun.jna.Pointer.setInt(Pointer.java:1124)
at it.caen.dig.Demo.main(Demo.java:83)
答案 0 :(得分:1)
您似乎正在使用错误的API。 getPointer
返回在该偏移量处找到的值作为指针(可能无处指向)。如果要获取指向该偏移量的指针,请使用share
:
使用给定的偏移量提供此内存的视图以计算新的基址。
Pointer pM = new Memory(65536);
Pointer p = pM.share(4);
pM.setInt(0, 0xFFFF);
p.setInt(0, 0xBBBB);