是什么导致信号“SIGILL”?

新手上路,请多包涵

我正在使用 NDK 和 GCC 将一些 C++ 代码移植到 Android。代码基本上运行。在某一时刻,在 Eclipse 中调试时,调用

Dabbler::Android::Factory* pFactory = new Dabbler::Android::Factory;

导致此错误:

 Thread [1] (Suspended: Signal 'SIGILL' received. Description: Illegal instruction.)
    1 <symbol is not available> 0x812feb44

这意味着什么?编译器是否出于某种原因生成了非法代码?我在构造函数中有一个断点(它什么都不做),它没有被命中。我已经完成了完整的重建。

我可能做错了什么导致这个问题?

原文由 Dabbler 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.1k
1 个回答

LeetCode 的在线编译器和开发环境生成 SIGILL 错误,这些错误在我的桌面 IDE 中不会产生相同的错误。

例如,具有越界索引的数组访问:

 ["foo", "bar"][2]

LeetCode 的编译器只显示错误:

运行时错误进程以信号退出 SIGILL

在本地 Xcode 游乐场中,相同 的代码会导致错误

错误:执行被中断,原因:EXC_BREAKPOINT (code=1, subcode=0x18f2ea5d8)。

进程一直停留在被中断的地方,使用“thread return -x”返回表达式求值前的状态。

只有在完整的 Xcode 项目编译和运行中才会报告实际错误:

线程 1:致命错误:索引超出范围

原文由 pkamb 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题