当前位置: 代码迷 >> Android >> 求帮小弟我看看这段jni代码哪里不对
  详细解决方案

求帮小弟我看看这段jni代码哪里不对

热度:28   发布时间:2016-05-01 12:32:24.0
求帮我看看这段jni代码哪里不对。
JNIEXPORT jobjectArray JNICALL Java_com_testASIFT_LibASIFT_qq(JNIEnv* env,jobject obj, jintArray iarr, int w, int h){
jint *cbuf;
cbuf = env->GetIntArrayElements(iarr, false);
ipixels1.clear();
PixelToVector(cbuf, w, h, &ipixels1);
env->ReleaseIntArrayElements(iarr, cbuf, 0);
keypointslist v;
siftPar siftparameters;
    default_sift_parameters(siftparameters);
compute_sift(v, ipixels1,w, h, siftparameters);

     //申明一个object数组
    jobjectArray args = 0;
 //数组大小
jsize  len = 100;
    //获取object所属类,一般为ava/lang/Object就可以了
jclass objClass = (env)->FindClass("java/lang/Object");
        //获取类中每一个变量的定义
    //名字
jfieldID str = (env)->GetFieldID(objClass,"name","java/lang/String;");
    //序列号
   jfieldID ival = (env)->GetFieldID(objClass,"serial","I");

    //新建object数组
   args = (env)->NewObjectArray(len, objClass, 0);
        //给每一个实例的变量付值,并且将实例作为一个object,添加到objcet数组中
  for(int i=0;i<VecLength;i++)
   {
   jobject _obj;

   for (int j=0;j<128;j++)
   {
   (env)->SetShortField(_obj,ival,(int)(v[i].vec[j]));
   (env)->SetObjectArrayElement(args, i*128+j, _obj);
   };
   };
    //返回object数组
    return args;
}


   这段代码是要把v里面的数组通过jobjectArray的args传递到java层。v的结构是这样的:
typedef std::vector<keypoint> keypointslist;
struct keypoint {
float x,y,
scale,
angle;
float vec[VecLength];
};

编译通过了,但是每次运行logcat都显示vm aborting,是内存问题吗?
  这段代码是网上复制改编的,不明白,哪里不对?
------解决方案--------------------
散分了!见者有份!
  相关解决方案