Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/187.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 是什么导致我的c++;JNI? 我试图在我的C++类中实现脸谱网登录。我试图从java获取用户的facebook信息。所有的东西都正确地从java传递到C++。_Android_C++_Android Ndk_Java Native Interface_Cocos2d X - Fatal编程技术网

Android 是什么导致我的c++;JNI? 我试图在我的C++类中实现脸谱网登录。我试图从java获取用户的facebook信息。所有的东西都正确地从java传递到C++。

Android 是什么导致我的c++;JNI? 我试图在我的C++类中实现脸谱网登录。我试图从java获取用户的facebook信息。所有的东西都正确地从java传递到C++。,android,c++,android-ndk,java-native-interface,cocos2d-x,Android,C++,Android Ndk,Java Native Interface,Cocos2d X,但是,当这段代码未注释时,我的应用程序会因信号11而崩溃(根据此处的其他类似答案,内存问题) //下面两行给出了错误。。。如果评论,没问题 facebookProfileInfoFetch是: void LoginScreen::facebookProfileInfoFetch(const char * value1, const char * value2, const char * value3) { LOGD(" ----------------- facebookProfileInfoF

但是,当这段代码未注释时,我的应用程序会因信号11而崩溃(根据此处的其他类似答案,内存问题)

//下面两行给出了错误。。。如果评论,没问题

facebookProfileInfoFetch是:

void LoginScreen::facebookProfileInfoFetch(const char * value1, const char * value2, const char * value3) {
LOGD(" ----------------- facebookProfileInfoFetch ------------- %s ------------ ", value1);
LOGD(" ----------------- facebookProfileInfoFetch ------------- %s ------------ ", value2);
LOGD(" ----------------- facebookProfileInfoFetch ------------- %s ------------ ", value3);

facebookUserName = value1;
facebookUserId = value2;
facebookUserGender = value3;

this->loginHumServer();

}
调用loginHumServer()时,它正在崩溃:

loginhumserver()是:

我无法调试它为什么会崩溃。请帮忙

编辑 我添加了onHttpRequestCompleted方法:

void LoginScreen::onHttpRequestCompleted(CCNode *sender, void *data)
{
    LOGD(" ----------------- LoginScreen onHttpRequestCompleted ------------------------- ");
    CCLOG("request completed");

    CCHttpResponse *response = (CCHttpResponse*)data;

    if (!response)
    {
        LOGD(" ----------------- LoginScreen onHttpRequestCompleted return ------------------------- ");
        return;
    }

    // You can get original request type from: response->request->reqType
    if (0 != strlen(response->getHttpRequest()->getTag()))
    {
        CCLog("%s completed", response->getHttpRequest()->getTag());
    }

    int statusCode = response->getResponseCode();
    char statusString[64] = {};
    sprintf(statusString, "HTTP Status Code: %d, tag = %s", statusCode, response->getHttpRequest()->getTag());
    //m_labelStatusCode->setString(statusString);
    CCLog("response code: %d", statusCode);

    if (!response->isSucceed())
    {
        CCLog(" %s response failed", response->getResponseData());
        CCLog("error buffer: %s", response->getErrorBuffer());
        LOGD(" ----------------- LoginScreen onHttpRequestCompleted response failed ------------------------- ");
        return;
    }

     //dump data
    std::vector<char> *buffer = response->getResponseData();

    char * charbuffer = new char[buffer->size()];

    printf("Http Test, dump data: ");

    unsigned int size=0;
    for (unsigned int i = 0; i < buffer->size(); i++)
    {
        charbuffer[i] = (*buffer)[i];
        size=i+1;
    }

    charbuffer[size] = 0;

    char *errorPos = 0;
    char *errorDesc = 0;
    int errorLine = 0;
    block_allocator allocator(1 << 10); // 1 KB per block

    json_value *root = json_parse(charbuffer, &errorPos, &errorDesc, &errorLine, &allocator);

    root = root->first_child;

    assert(root->type ==JSON_STRING );

    assert(std::string(root->name) == "user_id" );

    loginLabel->setString("Loading active games..");
    GameManager::create(root->json_value::string_value,facebookUserId.c_str(),facebookUserName.c_str());

//  GameManager::create("b37e329c-37ac-11e2-abf1-1231381a9805");

    delete[] charbuffer;

    this->next();

}
void LoginScreen::onHttpRequestCompleted(CCNode*发送方,void*数据)
{
LOGD(“--------------LoginScreen onHttpRequestCompleted--------------------”;
CCLOG(“请求完成”);
CCHttpResponse*响应=(CCHttpResponse*)数据;
如果(!响应)
{
LOGD(“------------LoginScreen on httprequestcompleted return-------------------------------------”;
返回;
}
//您可以从以下位置获取原始请求类型:响应->请求->请求类型
如果(0!=strlen(response->getHttpRequest()->getTag())
{
CCLog(“%s已完成”,响应->getHttpRequest()->getTag());
}
int statusCode=response->getResponseCode();
字符状态字符串[64]={};
sprintf(状态字符串,“HTTP状态代码:%d,标记=%s”,状态代码,响应->getHttpRequest()->getTag());
//m_labelStatusCode->setString(状态字符串);
CCLog(“响应代码:%d”,状态代码);
如果(!响应->isSucceed())
{
CCLog(“%s响应失败”,响应->getResponseData());
CCLog(“错误缓冲区:%s”,响应->getErrorBuffer());
LOGD(“------------LoginScreen onHttpRequestCompleted响应失败-----------------”;
返回;
}
//转储数据
std::vector*buffer=response->getResponseData();
char*charbuffer=新字符[buffer->size()];
printf(“Http测试,转储数据:”);
无符号整数大小=0;
对于(无符号整数i=0;isize();i++)
{
charbuffer[i]=(*buffer)[i];
尺寸=i+1;
}
charbuffer[size]=0;
char*errorPos=0;
char*errorDesc=0;
int errorLine=0;
块分配器分配器分配器(1个第一个子;
断言(根->类型==JSON\U字符串);
断言(std::string(root->name)=“用户id”);
登录标签->设置字符串(“加载活动游戏…”);
GameManager::create(root->json_value::string_value,facebookUserId.c_str(),facebookUserName.c_str());
//GameManager::创建(“b37e329c-37ac-11e2-abf1-1231381a9805”);
删除[]字符缓冲区;
这个->下一个();
}

您的某个地方有一个指向无效位置的指针。这就是导致分段错误的原因。崩溃似乎始于
LoginScreen::onHttpRequestCompleted
。您可以发布吗?

一个assert()正在触发。您在一个非常特定的地址失败:

INFO/DEBUG(5637): signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr deadbaad
0xdeadbaad
由仿生abort()函数使用。(不是每个人都喜欢这样——请参阅。)

堆栈跟踪告诉您失败的位置:

INFO/DEBUG(5637):          #00  pc 000179d8  /system/lib/libc.so
INFO/DEBUG(5637):          #01  pc 0001ef44  /system/lib/libc.so (__assert2)
INFO/DEBUG(5637):          #02  pc 000fb552  /data/data/com.humit/lib/libgame.so (_ZN11LoginScreen22onHttpRequestCompletedEPN7cocos2d6CCNodeEPv)
INFO/DEBUG(5637):          #03  pc 001c3e32  /data/data/com.humit/lib/libgame.so (_ZN7cocos2d9extension12CCHttpClient25dispatchResponseCallbacksEf)
\uuu资产2
,定义见仿生公司


正在从
LoginScreen::onHttpRequestCompleted(cocos2d::CCNode*,void*)调用它你可以使用一个地址到线工具,从库中的符号转换成一个特定的行数,但是理想的是,失败的断言本身将出现在原生崩溃之上的LogCAT。< /P>如果没有java,如果C++从同一个参数调用C++,那么函数会正常工作吗?@明林谢谢,但是这给了我同样的错误:(你能在/data/data/com.humit/lib/libgame.so中运行000fb552的addr2line吗?我感觉这是由delete[]引起的。另外,你不需要手动复制字符数组,只需执行
char*charbuffer=&(*buffer)[0]
和(我很确定)如果这样做,您可以删除该删除项。@llya O-好的,我会尝试一下……如果这会导致问题,y只在我取消注释时出现?y不在那些行r注释时出现?如果我注释这两行,其他一切都正常。。。
 12-06 13:49:45.380: INFO/DEBUG(5637): signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr deadbaad
12-06 13:49:45.380: INFO/DEBUG(5637):  r0 deadbaad  r1 01ddc9e8  r2 40000000  r3 00000000
12-06 13:49:45.380: INFO/DEBUG(5637):  r4 00000000  r5 00000027  r6 00000000  r7 57797f3c
12-06 13:49:45.380: INFO/DEBUG(5637):  r8 5c6d9c10  r9 57797f34  10 00000008  fp 5c6d9c24
12-06 13:49:45.380: INFO/DEBUG(5637):  ip ffffffff  sp 5c6d9a90  lr 400ff649  pc 400fb9d8  cpsr 60000030
12-06 13:49:45.380: INFO/DEBUG(5637):  d0  4448000044480000  d1  0000000000000000
12-06 13:49:45.380: INFO/DEBUG(5637):  d2  449a0000449a0000  d3  000004d0c41a0000
12-06 13:49:45.380: INFO/DEBUG(5637):  d4  3f8000004b7fffff  d5  449a000044480000
12-06 13:49:45.380: INFO/DEBUG(5637):  d6  4499e0004447c000  d7  0000000000000000
12-06 13:49:45.380: INFO/DEBUG(5637):  d8  0000000000000000  d9  0000000000000000
12-06 13:49:45.380: INFO/DEBUG(5637):  d10 0000000000000000  d11 0000000000000000
12-06 13:49:45.380: INFO/DEBUG(5637):  d12 0000000000000000  d13 0000000000000000
12-06 13:49:45.380: INFO/DEBUG(5637):  d14 0000000000000000  d15 0000000000000000
12-06 13:49:45.380: INFO/DEBUG(5637):  d16 5000000000000000  d17 0000000000000000
12-06 13:49:45.380: INFO/DEBUG(5637):  d18 0000000000000000  d19 0000000000000000
12-06 13:49:45.380: INFO/DEBUG(5637):  d20 0000000000000000  d21 0000000000000000
12-06 13:49:45.380: INFO/DEBUG(5637):  d22 0000000000000000  d23 0000000000000000
12-06 13:49:45.380: INFO/DEBUG(5637):  d24 0000000000000000  d25 0000000000000000
12-06 13:49:45.380: INFO/DEBUG(5637):  d26 0000000000000000  d27 0000000000000000
12-06 13:49:45.380: INFO/DEBUG(5637):  d28 0000000000000000  d29 0000000000000000
12-06 13:49:45.380: INFO/DEBUG(5637):  d30 0000000000000000  d31 0000000000000000
12-06 13:49:45.380: INFO/DEBUG(5637):  scr 60000010
12-06 13:49:45.650: INFO/DEBUG(5637):          #00  pc 000179d8  /system/lib/libc.so
12-06 13:49:45.650: INFO/DEBUG(5637):          #01  pc 0001ef44  /system/lib/libc.so (__assert2)
12-06 13:49:45.650: INFO/DEBUG(5637):          #02  pc 000fb552  /data/data/com.humit/lib/libgame.so (_ZN11LoginScreen22onHttpRequestCompletedEPN7cocos2d6CCNodeEPv)
12-06 13:49:45.655: INFO/DEBUG(5637):          #03  pc 001c3e32  /data/data/com.humit/lib/libgame.so (_ZN7cocos2d9extension12CCHttpClient25dispatchResponseCallbacksEf)
12-06 13:49:45.655: INFO/DEBUG(5637):          #04  pc 000ff9aa  /data/data/com.humit/lib/libgame.so (_ZN7cocos2d7CCTimer6updateEf)
12-06 13:49:45.655: INFO/DEBUG(5637):          #05  pc 001053d6  /data/data/com.humit/lib/libgame.so (_ZN7cocos2d11CCScheduler6updateEf)
12-06 13:49:45.655: INFO/DEBUG(5637):          #06  pc 0012f7f8  /data/data/com.humit/lib/libgame.so (_ZN7cocos2d10CCDirector9drawSceneEv)
12-06 13:49:45.660: INFO/DEBUG(5637):          #07  pc 00130df8  /data/data/com.humit/lib/libgame.so (_ZN7cocos2d21CCDisplayLinkDirector8mainLoopEv)
12-06 13:49:45.660: INFO/DEBUG(5637):          #08  pc 0016c66c  /data/data/com.humit/lib/libgame.so (Java_org_cocos2dx_lib_Cocos2dxRenderer_nativeRender)
12-06 13:49:45.660: INFO/DEBUG(5637):          #09  pc 0001ed70  /system/lib/libdvm.so (dvmPlatformInvoke)
12-06 13:49:45.660: INFO/DEBUG(5637):          #10  pc 0005902c  /system/lib/libdvm.so (_Z16dvmCallJNIMethodPKjP6JValuePK6MethodP6Thread)
void LoginScreen::onHttpRequestCompleted(CCNode *sender, void *data)
{
    LOGD(" ----------------- LoginScreen onHttpRequestCompleted ------------------------- ");
    CCLOG("request completed");

    CCHttpResponse *response = (CCHttpResponse*)data;

    if (!response)
    {
        LOGD(" ----------------- LoginScreen onHttpRequestCompleted return ------------------------- ");
        return;
    }

    // You can get original request type from: response->request->reqType
    if (0 != strlen(response->getHttpRequest()->getTag()))
    {
        CCLog("%s completed", response->getHttpRequest()->getTag());
    }

    int statusCode = response->getResponseCode();
    char statusString[64] = {};
    sprintf(statusString, "HTTP Status Code: %d, tag = %s", statusCode, response->getHttpRequest()->getTag());
    //m_labelStatusCode->setString(statusString);
    CCLog("response code: %d", statusCode);

    if (!response->isSucceed())
    {
        CCLog(" %s response failed", response->getResponseData());
        CCLog("error buffer: %s", response->getErrorBuffer());
        LOGD(" ----------------- LoginScreen onHttpRequestCompleted response failed ------------------------- ");
        return;
    }

     //dump data
    std::vector<char> *buffer = response->getResponseData();

    char * charbuffer = new char[buffer->size()];

    printf("Http Test, dump data: ");

    unsigned int size=0;
    for (unsigned int i = 0; i < buffer->size(); i++)
    {
        charbuffer[i] = (*buffer)[i];
        size=i+1;
    }

    charbuffer[size] = 0;

    char *errorPos = 0;
    char *errorDesc = 0;
    int errorLine = 0;
    block_allocator allocator(1 << 10); // 1 KB per block

    json_value *root = json_parse(charbuffer, &errorPos, &errorDesc, &errorLine, &allocator);

    root = root->first_child;

    assert(root->type ==JSON_STRING );

    assert(std::string(root->name) == "user_id" );

    loginLabel->setString("Loading active games..");
    GameManager::create(root->json_value::string_value,facebookUserId.c_str(),facebookUserName.c_str());

//  GameManager::create("b37e329c-37ac-11e2-abf1-1231381a9805");

    delete[] charbuffer;

    this->next();

}
INFO/DEBUG(5637): signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr deadbaad
INFO/DEBUG(5637):          #00  pc 000179d8  /system/lib/libc.so
INFO/DEBUG(5637):          #01  pc 0001ef44  /system/lib/libc.so (__assert2)
INFO/DEBUG(5637):          #02  pc 000fb552  /data/data/com.humit/lib/libgame.so (_ZN11LoginScreen22onHttpRequestCompletedEPN7cocos2d6CCNodeEPv)
INFO/DEBUG(5637):          #03  pc 001c3e32  /data/data/com.humit/lib/libgame.so (_ZN7cocos2d9extension12CCHttpClient25dispatchResponseCallbacksEf)