jni使用NewDirectByteBuffer在java中查看随机内容

jni使用NewDirectByteBuffer在java中查看随机内容,java,java-native-interface,bytebuffer,Java,Java Native Interface,Bytebuffer,在我的jni代码中 std::vector<uint32_t> vecIndices = sm->getIndices(); for(int i=0;i<4;i++) { printf("%i, ",vecIndices[i]); } printf("\n"); uint32_t* p = &vecIndices[0]; for(int i=0;i<4;i++) { printf("%i, ",p[i]); } printf("\n\n");

在我的jni代码中

std::vector<uint32_t> vecIndices = sm->getIndices();
for(int i=0;i<4;i++) {
    printf("%i, ",vecIndices[i]);
}
printf("\n");
uint32_t* p = &vecIndices[0];
for(int i=0;i<4;i++) {
    printf("%i, ",p[i]);
}
printf("\n\n");

fflush(stdout);
jobject buff = env->NewDirectByteBuffer((void*)&p[0],sm->getNoOfIndices()*sizeof(uint32_t));

return buff;
从第二行(0,2,1,1)开始,我似乎在一个内存块中有一组连续的值,正如std::vector所预期的那样,但将此地址提供给NewDirectByteBuffer,甚至查看字节值,我似乎都会得到奇数值…

std::vectorIndexes
在函数末尾从作用域中删除

因此
p
处的内存不再可用


假设
NewDirectByteBuffer
不获取数组的深度副本,
buff
将引用您不再拥有的内存。

jobject buff=env->NewDirectByteBuffer((void*)&(sm->getindex()[0]),sm->getNoOfIndices()*sizeof(uint32_t));-似乎解决了它-盯着它看了很久却没有看到它!
    ByteBuffer ind = PVcore.meshGetIndices(mesh);
    IntBuffer indI= ind.asIntBuffer();

    for (int i=0;i<4;i++) {
        System.out.print(indI.get(i)+", ");
    }
    System.out.println();

    for (int i=0;i<16;i++) {
        if (i % 4==0) System.out.println();
        System.out.print(ind.get(i)+", ");
    }
    System.out.println();
 [java] 0, 2, 1, 1, 
 [java] 0, 2, 1, 1, 
 [java] 
 [java] 0, 0, -797764393, 117440512, 
 [java] 
 [java] 0, 0, 0, 0, 
 [java] 0, 0, 0, 0, 
 [java] -48, 115, 20, -41, 
 [java] 7, 0, 0, 0,