当前位置:编程学习 > wap >>

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).... --------------------编程问答--------------------
引用 1 楼 birdsaction 的回复:
jbyte *b = env->GetByteArrayElements(buffer, &iscopy);
buffer多大? 是否为空?
代码写的应该没有问题。

现在可以正常读取了,但是我遇到另一个问题
在c++获取GetArrayLength的时候,发现长度和之前的长度并不相同了
这事怎么回事? --------------------编程问答-------------------- 你是说和java传进来byte Array长度不一样? --------------------编程问答--------------------
引用 4 楼 birdsaction 的回复:
你是说和java传进来byte Array长度不一样?

在java里面获取的长度和在c++通过GetArrayLength获取的长度不一样
补充:移动开发 ,  Android
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,