您的位置:首页 > 其它

JNI 数组返回值问题记录

2017-06-07 23:09 253 查看
JNIEXPORT jintArray JNICALL Java_com_example_zhongtao_jniday13_Hello_arrElement(JNIEnv *env, jclass jobj, jintArray jarry){
//获取数组长度
int len=(*env)->GetArrayLength(env,jarry);
LOGD("array len==%d",len);
jintArray jin_arr=(*env)->NewIntArray(env,len); //定义一个jintArray数组
//获取数组首地址
//java中的boolean,用来表示GetIntArrayElements()执行完后是否创建副本,没有创建返回NULL,创建了返回True,一般不用这个参数直接传一个NULL
//    jboolean isCopy=NULL;
jint* p=(*env)->GetIntArrayElements(env,jarry,NULL);
int i;
for(i=0;i<len;i++){
*(p+i) +=10;
LOGD("*p==%d",(*(p+i)));
}
//将p的值赋给新数组jin_arr
(*env)->ReleaseIntArrayElements(env,jin_arr,p,0);
//获取到了数组的首地址,通过指针操作每个元素之后,jarry里的每一个元素已经被修改,所以可以直接返回jarry;
return jin_arr;
}

上述代码中碰到的问题就是使用指针p获取到jarry数组的首地址,然后对p进行操作,本来正常情况下对P操作后就是直接对jarry进行了操作
返回值直接返回jarry就可以了,但是我的返回值没有发生变化。
寻求大神帮忙后,说是重新new一个数组,重新给他赋值就行了。
jintArray jin_arr=(*env)->NewIntArray(env,len); //定义一个jintArray数组
//将p的值赋给新数组jin_arr
(*env)->ReleaseIntArrayElements(env,jin_arr,p,0);
以后可以这样操作了。至于为什么不能直接返回形参还在寻找答案。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: