gpt4 book ai didi

java - For循环原因: VM aborting - Fatal signal 6 (SIGABRT) code=-6

转载 作者:太空宇宙 更新时间:2023-11-04 13:52:59 38 4
gpt4 key购买 nike

我不知道为什么会抛出这个错误。仅当使用循环时应用程序才会崩溃。我正在将 ArrayList < ArrayList < Point >> 导入 ndk。我无法使用 opencv 在 ndk 中打开视频文件进行视频处理,因此我在 java 端使用 javacv 获取位置(一般来说我是 android 新手,我找不到更优雅的方法)

外部数组的长度为 10(最大 50),内部数组的长度不同(200 - 500)

我最初认为这可能是由于 android 中的内存限制。我现在相信这不可能,因为我运行了一个空循环迭代 10 次。它给了我同样的错误。我不明白这个错误是什么意思。

我是安卓新手。有人可以帮我吗?这件事该怎么办呢?我很感激任何和所有的建议。提前致谢!

CODE:

    // Class totd to get obj arraylist
jclass totd = env -> FindClass ("java/util/ArrayList");

//Methods in totd
jmethodID totd_get = env-> GetMethodID (totd, "get", "(I)Ljava/lang/Object;");
jmethodID totd_size = env-> GetMethodID (totd, "size", "()I");

//Get length of ArrayList

jint totd_len = env-> CallIntMethod (totdat,totd_size);
//start loop for each frame process data:
jint i;
vector<vector<Point> > totalpnts;
for (i=0;i<=totd_len;i++){

//Get postion data for current frame
jobject fd = env-> CallObjectMethod (totdat,totd_get,i);
jclass curd = env-> FindClass ("java/util/ArrayList");
//Get methods of inner array
jmethodID curd_get = env-> GetMethodID (curd, "get", "(I)Ljava/lang/Object;");
jmethodID curd_size = env-> GetMethodID (curd, "size", "()I");
//Get no. of objects found
jint objcnt = env-> CallIntMethod (fd,curd_size);
//Extract data from point
jlong j = 0;
vector<Point> framepnts;
//for(j = 0; j <= objcnt ; j++){
//Id objlist
jobject ptxy = env-> CallObjectMethod (fd,curd_get,j);
jclass pnt = env-> GetObjectClass(ptxy);
jmethodID constr = env->GetMethodID(pnt, "<init>", "(II)V");
jfieldID fix = env->GetFieldID(pnt, "x", "I");
jfieldID fiy = env->GetFieldID(pnt, "y", "I");

Point xy;
xy.x = env-> GetIntField(ptxy,fix);
xy.y = env-> GetIntField(ptxy,fiy);
framepnts.push_back(xy);

//}


totalpnts.push_back(framepnts);


}

ERROR:

05-08 13:30:38.593: E/dalvikvm(17064): VM aborting
05-08 13:30:38.595: A/libc(17064): Fatal signal 6 (SIGABRT) at 0x000042a8 (code=-6), thread 17064 (st.trackerproto)

最佳答案

我不是来自 NDK/C++ 世界,但是 I know that debugging in NDK world is a complicated task 。从java端,你总是会得到致命信号N(SIGABRT)(无论NDK层发生什么),这意味着你的C++代码中发生了一些错误。但你不会知道它是什么类型的错误(但是 N 值可能不同,如 6 或 11),因为它是 Java 并且它不知道为什么。您认为循环是一个问题,但您不确定,也许它发生在循环之后、之前或内部。肯定是你的 C++ 代码出了问题。
另请参阅Debugging Android NDK native apps

关于java - For循环原因: VM aborting - Fatal signal 6 (SIGABRT) code=-6,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30119180/

38 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com