【问题标题】:NDK, C: Fatal signal 6 when used function - int close(int fd);NDK, C: 使用函数时的致命信号 6 - int close(int fd);
【发布时间】:2015-04-08 22:48:11
【问题描述】:

任何变体,为什么在使用函数 close(cxt->sysfs.dir_fd) 后(在这种情况下 cxt->sysfs.dir_fd = 0)我得到错误

04-08 13:34:57.496    4766-4782/pro.org A/OpenGLRenderer﹕ Failed to create context, error = EGL_BAD_ALLOC
04-08 13:34:57.496    4766-4782/pro.org A/libc﹕ Fatal signal 6 (SIGABRT), code -6 in tid 4782 (RenderThread)

close(cxt->sysfs.dir_fd) 也 = 0 ,但应用程序崩溃了... 我能做些什么来防止错误,任何调试?朝什么方向看? 谢谢你

【问题讨论】:

  • 0 是什么?关闭参数,返回值,或两者兼而有之?我不习惯用 Android 编码,但是如果你关闭了你自己没有打开的东西,作为 0(这是你程序打开的第一件事),就会发生不好的事情......
  • 你能解释一下为什么你试图关闭 cxt->sysfs.dir_fd 吗?看起来它很重要:OpenGL 可能需要那个东西来渲染。

标签: android c android-ndk


【解决方案1】:

您关闭了 OpenGL 的主要资源。除非您正在关闭您的应用程序,否则您不必关闭此资源。

在您在评论中添加的所有示例中,仅在应用程序端调用了 close。你也应该这样做。

【讨论】:

  • @Andreyua - 无论你想做什么,你都做错了。不要试图关闭它,至少不要在你的程序中间。
  • @Andreyua - 在大多数情况下,不仅是 OpenGL,当您在 API 中已经打开一些 fd 的情况下启动应用程序时,在应用程序结束之前不要关闭它们。如果稍后您通过打开其他内容创建自己的 fd,请确保使它们与您之前的内容不同。
  • @Andreyua - 这里的代码没有真正的“检查”。小心不要关闭重要资源是开发人员的工作。我建议你花更多的时间阅读你的 API 文档:这种事情应该被警告。
  • @Andreyua - 我不明白你为什么对这个 fd 如此着迷......你不必改变它 - 如果 OpenGL 尝试在之后重新使用它甚至可能是危险的.唯一要做的就是不要关闭,除非在你的 deinit 函数中。
猜你喜欢
  • 2016-01-05
  • 2014-04-17
  • 1970-01-01
  • 2014-04-29
  • 2014-12-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多