Java JNI NewIntArray()可以';不要创建大数组

Java JNI NewIntArray()可以';不要创建大数组,java,c++,c,android-ndk,java-native-interface,Java,C++,C,Android Ndk,Java Native Interface,使用本指南,我使用JNI调用加载带有Android类位图的PNG文件。在我尝试从位图中获取像素数据之前,这一切都是完美的。我只是无法创建一个适合图像数据(512*256)的jint数组,应用程序就在这一行崩溃了。我做了一些测试,它只在JNI中不会自动出现大小异常的jint阵列上工作,不会崩溃。您必须编写代码来触发它们。i、 e.它将错误存储在某个地方,您必须添加代码以说明您希望在何处触发异常 从 我不知道哪一个更好。你需要给我们看一下坠机情况。纽因塔雷不应该坠毁;它应该返回NULL。(如

使用本指南,我使用JNI调用加载带有Android类位图的PNG文件。
在我尝试从位图中获取像素数据之前,这一切都是完美的。我只是无法创建一个适合图像数据(512*256)的jint数组,应用程序就在这一行崩溃了。我做了一些测试,它只在JNI中不会自动出现大小异常的jint阵列上工作,不会崩溃。您必须编写代码来触发它们。i、 e.它将错误存储在某个地方,您必须添加代码以说明您希望在何处触发异常



我不知道哪一个更好。

你需要给我们看一下坠机情况。纽因塔雷不应该坠毁;它应该返回NULL。(如果NewIntArray失败,env->ExceptionCheck()也将返回true。)但崩溃应该会告诉您问题所在,因此您需要显示“adb logcat”输出。

这不是真的。JNI确实“抛出”异常。在您返回托管代码之前,它们不会改变控制流,但它们确实存在。如果存在挂起的托管异常,env->ExceptionCheck()将返回true。@ElliottHughes我明白你的意思了。如果代码自然到达JNI调用的末尾,并且触发了异常/错误,您将看到它。然而,如果您有一个返回null的方法,并且您使用这个值,您的应用程序将崩溃,您将不会看到任何可能发生的错误。(与Java不同,Java在抛出错误时会中断执行)
#include <jni.h>    

int load_image_png(const char* path, GLuint* width, GLuint* height, void** image_data){
//Skip part what works fine - get bitmap width and height
//width=512, height=256

 jintArray array = g_env->NewIntArray(width*height);//FAIL OVERHERE

 jint* pixels = g_env->GetIntArrayElements(array, 0);
 *image_data = pixels;

 //closing a bitmap work fine too

 return 0;