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); 以后可以这样操作了。至于为什么不能直接返回形参还在寻找答案。
相关文章推荐
- Android问题集锦转载之三:Javah 常见错误记录-NDK与JNI除错
- C#学习记录---ExecuteNonQuery()返回值问题
- JNI之c/c++返回中文给java 乱码问题以及java数组在c排序
- char[] char数组 char*返回值的问题
- 做数组题时,出现的与返回值有关的问题
- Array.from 对象数组的问题记录
- JNI数组类型转换遇到问题及解决(new jdouble(len)与new jdouble[len]的区别)
- 【LeetCode题目记录-4】插入数组间隔问题
- 工作记录--jni小问题
- Android JNI 自己遇到的问题记录
- JNI 线程问题记录
- C#中ArrayList 与 string、string[]数组 的转换 (转学习:今天做项目时遇到一个arrylist转换问题,做记录)
- java rest框架jersey数组单记录问题解决
- 关于C++中返回值是数组类型失败的问题
- JNI中通过参数来传递数组返回值(C和java间)
- 迷宫问题 (广搜记录路径(数组))
- JNI开发遇到的一些问题记录(持续记录更新)
- Android JNI (问题记录)
- (2)int A[nSize],其中隐藏着若干0,其余非0整数,写一个函数int Func(int* A, int nSize),使A把0移至后面,非0整数移至数组前面并保持有序,返回值为原数据中第一个元素为0的下标。(尽可能不使用辅助空间且考虑效率及异常问题,注释规范且给出设计思路)
- JNI学习笔记5——本地方法处理java数组/引用问题/缓存jfieldID/jmethodID