Java fmemopen与JNI崩溃

Java fmemopen与JNI崩溃,java,c,java-native-interface,Java,C,Java Native Interface,我有以下Java代码: import java.io.IOException; public class Simple { public native void initClient(byte[] buffer, int size); static { System.loadLibrary("simpleclient"); } public static void main(String[] args) throws Excepti

我有以下Java代码:

import java.io.IOException;

public class Simple {

    public native void initClient(byte[] buffer, int size);

    static {
            System.loadLibrary("simpleclient");
    }

    public static void main(String[] args) throws Exception {

            Simple client = new Simple();
            byte[] buffer = "test".getBytes();

            client.initClient(buffer, buffer.length);
    }

}
和下面的C代码:

#include <jni.h>
#include <stdio.h>

JNIEXPORT void JNICALL Java_Simple_initClient
(JNIEnv *env, jobject jobj, jbyteArray jBuffer, int size)
{

    unsigned char *buffer = (unsigned char*)malloc(sizeof(unsigned char) * size);
    if(buffer == NULL || jBuffer == NULL) return;

    (*env)->GetByteArrayRegion(env, jBuffer, 0, size,(jbyte*) buffer );

    FILE * metaFile = NULL;
    metaFile = fmemopen(buffer, size, "rb");
    if(metaFile == NULL) return;

    printf("int _flags %d\n", metaFile->_flags);

}
这会在C中的printf调用中出现SIGSEGV崩溃


我已经检查了缓冲区在崩溃和未崩溃时是否都有有效数据。

请尝试rb+或r+b,而不是rb,以便FMemoppentried this。仍然崩溃
gcc -o libsimpleclient.so -shared -fPIC simpleclient.c

javac Simple.java
java -Djava.library.path=. -cp . Simple