Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/157.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 SEGV_ACCERR房间创建后谷歌游戏服务_Android_C++_Cocos2d X_Google Play Games - Fatal编程技术网

Android SEGV_ACCERR房间创建后谷歌游戏服务

Android SEGV_ACCERR房间创建后谷歌游戏服务,android,c++,cocos2d-x,google-play-games,Android,C++,Cocos2d X,Google Play Games,我正在用Cocos2d-x和googleplay游戏服务为网络编写游戏。 我正在使用以下代码创建一个实时房间: auto scene = BattleScene::createScene(); BattleScene *layer; if (scene->getChildByName("layer")) { layer = static_cast<BattleScene *>(scene->getChildByName("layer"));

我正在用Cocos2d-x和googleplay游戏服务为网络编写游戏。 我正在使用以下代码创建一个实时房间:

 auto scene = BattleScene::createScene();
    BattleScene *layer;
    if (scene->getChildByName("layer")) {
      layer = static_cast<BattleScene *>(scene->getChildByName("layer"));
    } else {
      log("Cannot get layer!");
      return;
    }
    log("Creating room...");
    auto gameServices = StateManager::getGameServices();
    gpg::RealTimeRoomConfig config = gpg::RealTimeRoomConfig::Builder()
                                         .SetMinimumAutomatchingPlayers(1)
                                         .SetMaximumAutomatchingPlayers(1)
                                         .Create();
    log("config created");
    gameServices->RealTimeMultiplayer().CreateRealTimeRoom(
        config, layer,
        [&](gpg::RealTimeMultiplayerManager::RealTimeRoomResponse const
                &response) {
          log("created a room %d", response.status);
          if (gpg::IsSuccess(response.status)) {
            gameServices->RealTimeMultiplayer().ShowWaitingRoomUI(
                response.room, 1,
                [&](gpg::RealTimeMultiplayerManager::
                        WaitingRoomUIResponse const &wait_response) {
                  log("WaitingRoomUIResponse");
                  if (IsSuccess(wait_response.status)) {
                    log("Game started");
                    Director::getInstance()->replaceScene(scene);
                  }
                });
          } else
            log("Error1");
        });
auto-scene=BattleScene::createScene();
战场*层;
如果(场景->getChildByName(“层”)){
层=静态_投射(场景->getChildByName(“层”);
}否则{
日志(“无法获取层!”);
返回;
}
日志(“创建房间…”);
auto gameServices=StateManager::getGameServices();
gpg::RealTimeRoomConfig config=gpg::RealTimeRoomConfig::Builder()
.SetMinimumAutoMatchingPlayer(1)
.SetMaximumAutoMatchingPlayer(1)
.Create();
日志(“配置已创建”);
gameServices->RealTimeMultiplayer().CreateRealTimeRoom(
配置,层,
[&](gpg::RealTimeMultiplayerManager::RealTimeRoomResponse常量
&(答复){
日志(“创建了房间%d”,响应状态);
if(gpg::issucess(response.status)){
gameServices->RealTimeMultiplayer().ShowWaitingRoomUI(
答复:1号会议室,
[&](gpg::RealTimeMultiplayerManager::
WaitingRoomUIResponse常量和wait_响应){
日志(“WaitingRoomUIResponse”);
if(IsSuccess(等待响应状态)){
日志(“游戏开始”);
Director::getInstance()->ReplaceSecene(场景);
}
});
}否则
日志(“错误1”);
});
但随后(当第二个播放器连接时)应用程序因该日志而失败:

signal 11 (SIGSEGV), code 2 (SEGV_ACCERR), fault addr 00584918
Stack frame #00  pc 00584918  [heap]
Stack frame #01  pc 004d4526  /data/data/com.railon.luck/lib/libMyGame.so: Routine std::_Function_handler<void (gpg::RealTimeRoom const&, gpg::MultiplayerParticipant const&), gpg::RealTimeEventListenerHelperImpl::RealTimeEventListenerHelperImpl(gpg::IRealTimeEventListener*)::{lambda(gpg::RealTimeRoom const&, gpg::MultiplayerParticipant const&)#5}>::_M_invoke(std::_Any_data const&, gpg::RealTimeRoom const&, gpg::MultiplayerParticipant const&) at libgcc2.c:?
Stack frame #02  pc 004ec9c8  /data/data/com.railon.luck/lib/libMyGame.so (_ZNKSt8functionIFvRKN3gpg12RealTimeRoomERKNS0_22MultiplayerParticipantEEEclES3_S6_): Routine std::function<void (gpg::RealTimeRoom const&, gpg::MultiplayerParticipant const&)>::operator()(gpg::RealTimeRoom const&, gpg::MultiplayerParticipant const&) const at ??:?
Stack frame #03  pc 004eca08  /data/data/com.railon.luck/lib/libMyGame.so: Routine std::_Function_handler<void (), gpg::RealTimeEventListenerHelperImpl::WrappedRealTimeEventListener::OnParticipantStatusChanged(gpg::RealTimeRoom const&, gpg::MultiplayerParticipant const&)::{lambda()#1}>::_M_invoke(std::_Any_data const&) at libgcc2.c:?
Stack frame #04  pc 00509f6a  /data/data/com.railon.luck/lib/libMyGame.so: Routine gpg::PlatformExecuteOperation(std::function<void ()> const&) at libgcc2.c:?
信号11(SIGSEGV),代码2(SEGV_ACCERR),故障地址00584918
堆栈帧#00 pc 00584918[堆]
堆栈帧#01 pc 004d4526/data/data/com.railon.luck/lib/libMyGame.so:Routine std:_Function_handler::_M_invoke(std:_Any_data const&,gpg::RealTimeRoom const&,gpg::multiplayerpartiparticipant const&)在libgcc2.c:?
堆栈帧#02 pc 004ec9c8/data/data/com.railon.luck/lib/libMyGame.so(_ZNKSt8functionIFvRKN3gpg12RealTimeRoomERKNS0_22多层参与者eecles3_S6):例程std::function::operator()(gpg::RealTimeRoom const&,gpg::多层参与者const&)const at?
堆栈帧#03 pc 004eca08/data/data/com.railon.luck/lib/libMyGame.so:例程std::_函数_处理程序::_M_调用(std:_Any_data const&)在libgcc2.c:?
堆栈帧#04 pc 00509f6a/data/data/com.railon.luck/lib/libMyGame.so:libgcc2.c上的例程gpg::PlatformExecuteOperation(std::function const&)?
问题似乎出现在
BattleSceneClass
中的
OnParticipantStatusChanged
func中,但即使该func为空,也会出现错误 你有什么想法吗?
是的,
BattleScene
在父母中有
IRealTimeEventListener

如果你使用
ndk堆栈
并将一个包含整个跟踪的文件传递给它,从
***
开始,你可能会得到一个改进的回溯。@TankorSmash不幸的是,它是ndk堆栈的输出(我在其中传递了logcat结果)哦,糟糕,我通常会得到文件路径。@TankorSmash在其他情况下,我有完整的文件路径可以销毁场景吗?“自动场景”变量的范围是什么?如果您不声明它而是静态的,它的行为是否会有所不同?是否有其他方法可以销毁层对象,从而使回调地址无效?如果您使用
ndk堆栈
,并将一个包含整个跟踪的文件传递给它,从
***
开始,您可能会得到一个改进的回溯。@TankorSmash不幸的是,它是ndk堆栈的输出(我在其中传递了logcat结果)哦,糟糕,我通常会得到文件路径。@TankorSmash在其他情况下,我有完整的文件路径可以销毁场景吗?“自动场景”变量的范围是什么?如果您不声明它而是静态的,它的行为是否会有所不同?是否有其他方法可以销毁层对象,从而使回调地址无效?