android传递字符数组的时候挂掉了
用java调用c++的时候,java传入一个byte数组在c++的代码如下
Java_com_backfire_Receiver(JNIEnv *env,jobject obj,jstring msg, jlong uid, jbyteArray buffer)
{
char *buf;
jint len = 0;
LOGD("fun %s, line %d\n", __FUNCTION__, __LINE__);
// return 0;
#if 1
jboolean iscopy = JNI_FALSE;
jbyte *b = env->GetByteArrayElements(buffer, &iscopy);
LOGD("fun %s, line %d\n", __FUNCTION__, __LINE__);
len = env->GetArrayLength(buffer);
LOGD("fun %s, line %d\n", __FUNCTION__, __LINE__);
Client *c = g_game->get_client_by_uid(uid);
if (c == NULL)
{
LOGD("err get_client_by uid\n");
env->ReleaseByteArrayElements(buffer, b, 0);
return -1;
}
c->input_process((char *)b, len);
LOGD("fun %s, line %d\n", __FUNCTION__, __LINE__);
env->ReleaseByteArrayElements(buffer, b, 0);
return 0;
#endif
}
现在在程序里面一直打日志,在GetByteArrayElements之前还能看到日志,但是在GetByteArrayElements后的日志就看不到,程序挂掉
有哪位大师可以指点一二? --------------------编程问答-------------------- jbyte *b = env->GetByteArrayElements(buffer, &iscopy);
buffer多大? 是否为空?
代码写的应该没有问题。
--------------------编程问答-------------------- 之后判断下B呢
if(b).... --------------------编程问答--------------------
现在可以正常读取了,但是我遇到另一个问题
在c++获取GetArrayLength的时候,发现长度和之前的长度并不相同了
这事怎么回事? --------------------编程问答-------------------- 你是说和java传进来byte Array长度不一样? --------------------编程问答--------------------
在java里面获取的长度和在c++通过GetArrayLength获取的长度不一样
补充:移动开发 , Android