【问题标题】:Fatal signal 11 when using c++11 on Android(Gallxy 4s)在 Android(Gallxy 4s)上使用 c++11 时出现致命信号 11
【发布时间】:2013-11-17 13:16:21
【问题描述】:

我正在使用 cocos2d-x 2.2 制作游戏,我在 xcode 和 ios 上编译和构建 c++11 的东西没有问题。在 android 项目上编译和构建也没有问题。

但问题是我在尝试使用 lambda 函数调用 c++11 功能 std::function 时遇到运行时错误。

11-17 00:13:38.201:A/libc(5419):致命信号 11 (SIGSEGV) 位于 0x000001d0 (code=1),线程 5446 (Thread-27308)

代码没什么特别的。 std::function 类型的成员变量,保存 lambda 函数,称为特定时序。

会有什么问题?我的测试设备是 Gallxy 4s。

完全相同的代码在 ios 7 和 iPhone 4 上运行良好。

任何建议都会很棒。

编辑1。添加了简化代码。

class SimpleObject {
  typedef std::function<void (unsigned bx, unsigned by)> ClickEventHandler_t;
  ClickEventHandler_t m_click_handler;

  void SetClickEventHandler(ClickEventHandler_t handler) { m_click_handler = handler; }
};

// setup

obj->SetClickEventHandler([this](unsigned bx, unsigned by) {  TrapClicked(bx, by); });

void TrapClicked(unsigned bx, by)
{
  CCLog("Trap clicked!");
}

// call

if (m_click_handler) 
  m_click_handler(boardx, boardy);

【问题讨论】:

  • 你能分享一下有问题的代码吗? “没什么特别的”有点含糊。
  • 我添加了一些代码。我认为代码不会是问题,因为它在 ios 中运行良好。
  • 供将来参考:不要将代码粘贴在&lt;pre&gt;&lt;/pre&gt; 标记之间,而是将整个代码块缩进四个空格。您可以通过选择整个代码块并点击问题/答案编辑器中的{} 按钮来快速完成此操作。
  • @Casey / 哦,这是个好建议。我不知道。谢谢;)
  • 你使用的安卓编译器是什么?您在该 lambda 中捕获的 this 的生命周期是多少?

标签: android c++11 lambda cocos2d-x


【解决方案1】:

我在尝试加载 tmx 地图时遇到了同样的错误,其中它的对象项目(如图像和图块集)不在同一目录中,并且它们被引用到我的 pc 路径。顺便说一句,它编译成功,没有错误。因此,请确保您调用的是同一“资源”目录中的项目,而不是其外部。

【讨论】:

  • 嗯,谢谢你的提示。但就我而言,它与资源路径无关。因为它可以在我的 iPhone 上运行,并且我在没有资源负载的情况下尝试了 lambda 函数。
  • 如果你能分享你的 logcat 那就太好了。
猜你喜欢
  • 2012-05-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-27
  • 1970-01-01
  • 2013-08-11
  • 2012-09-16
  • 1970-01-01
相关资源
最近更新 更多