首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >循环原因: VM中止-致命信号6 (SIGABRT)代码=-6

循环原因: VM中止-致命信号6 (SIGABRT)代码=-6
EN

Stack Overflow用户
提问于 2015-05-08 08:25:20
回答 1查看 1.6K关注 0票数 1

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

外部阵列的长度为10 (最大50),内部的长度变化(200 - 500)。

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

我对android很陌生。有人能帮我吗?这件事该怎么办?我对所有的建议表示感谢。提前感谢!

代码:

代码语言:javascript
复制
    // 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);


}

错误:

代码语言:javascript
复制
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)
EN

回答 1

Stack Overflow用户

发布于 2015-05-08 08:50:17

我不是来自NDK/C++世界,而是我知道在NDK世界中进行调试是一项复杂的任务。。从java端,您将始终得到Fatal signal N (SIGABRT) (无论在NDK层上发生什么),这意味着在C++代码中发生了一些错误。但是您将不知道它是什么类型的错误(但是N值可能与6或11不同),因为它的Java不知道为什么。您认为循环是一个问题,但您不确定,它可能发生在循环之后或之前或内部。这肯定是你的C++代码出了问题。

此外,请参阅调试Android本地应用程序

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30119180

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档