Я не знаю, почему эта ошибка возникает. Только при использовании цикла происходит сбой приложения. Я импортирую ArrayList < ArrayList < Point>> в ndk. Я не могу открыть видеофайлы в ndk с opencv для видеообработки, поэтому я получаю позиции с javacv на стороне java (я новичок в Android и вообще не нашел более элегантный метод)Для причин цикла: прерывание VM - фатальный сигнал 6 (SIGABRT) code = -6
Внешние массив имеет длину 10 (макс. 50), а внутренняя имеет разную длину (200 - 500)
Первоначально я думал, что это связано с ограничениями памяти в Android. Теперь я верю, что этого не может быть, потому что я пробежал пустую петлю, повторяя ее 10 раз. Это дает мне ту же ошибку. Я не понимаю, что означает эта ошибка.
Я новичок в android. Кто-нибудь может мне помочь? Как это следует делать? Я благодарен за любые предложения. Заранее спасибо!
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)
«Отмена VM» означает, что виртуальная машина сознательно разбилась сама. Если вы посмотрите немного дальше на выход logcat, вы найдете объяснение. – fadden