Java 使用Pdfium库时,在垃圾收集SIG 9期间Android JNI本机崩溃

Java 使用Pdfium库时,在垃圾收集SIG 9期间Android JNI本机崩溃,java,android,c++,android-ndk,java-native-interface,Java,Android,C++,Android Ndk,Java Native Interface,我正在尝试使用访问我的应用程序中的pdf文件 并添加了一些功能,如使用java和C++进行搜索和高亮显示。问题是,我总是得到一个崩溃没有例外的细节。在调试中,我发现SIGABRT(信号SIGABRT)SIG:9错误地址 我的本职工作是 #include <fpdftext.h> JNIEXPORT jstring JNICALL Java_[my package]_PdfiumCore_nativeGetPageText(JNIEnv *env, jobject instance

我正在尝试使用访问我的应用程序中的pdf文件 并添加了一些功能,如使用java和C++进行搜索和高亮显示。问题是,我总是得到一个崩溃没有例外的细节。在调试中,我发现SIGABRT(信号SIGABRT)SIG:9错误地址

我的本职工作是

#include <fpdftext.h>

JNIEXPORT jstring JNICALL Java_[my package]_PdfiumCore_nativeGetPageText(JNIEnv *env, jobject instance, jlong pagePtr) {
unsigned short* buffer;
FPDF_TEXTPAGE text_page = FPDFText_LoadPage((FPDF_PAGE) pagePtr);
int len = FPDFText_CountChars(text_page);
FPDFText_GetText(text_page,0,len,buffer);
jstring txt = env->NewString(buffer, len);
FPDFText_ClosePage(text_page);
return txt; }
函数调用

Log.e("Page 0",pdfiumCore.getPageText(pdfDocument,0));
一旦应用程序崩溃,函数就会检索数据。我猜问题是当垃圾收集器试图删除FPDFText\u GetText函数中使用的缓冲区指针时。但我不知道怎么解决它


有什么建议吗

我通过在JNI函数中使用此代码获取数据后删除指针解决了这个问题

JNIEXPORT jstring JNICALL Java_[my package]_PdfiumCore_nativeGetPageText(JNIEnv *env, jobject instance,
                                                              jlong pagePtr) {
jstring txt;
FPDF_TEXTPAGE text_page = FPDFText_LoadPage((FPDF_PAGE) pagePtr);
int len = FPDFText_CountChars(text_page);
unsigned short *buffer = new unsigned short[len];
FPDFText_GetText(text_page, 0, len, buffer);
txt = env->NewString(buffer,len);
delete[](buffer);
FPDFText_ClosePage(text_page);
return txt;}
JNIEXPORT jstring JNICALL Java_[my package]_PdfiumCore_nativeGetPageText(JNIEnv *env, jobject instance,
                                                              jlong pagePtr) {
jstring txt;
FPDF_TEXTPAGE text_page = FPDFText_LoadPage((FPDF_PAGE) pagePtr);
int len = FPDFText_CountChars(text_page);
unsigned short *buffer = new unsigned short[len];
FPDFText_GetText(text_page, 0, len, buffer);
txt = env->NewString(buffer,len);
delete[](buffer);
FPDFText_ClosePage(text_page);
return txt;}