Lua状态的生命

时间:2019-04-09 09:18:02

标签: c lua

我在微控制器环境中使用Lua,最近我发生了一些与堆数据损坏有关的崩溃。

该问题被跟踪为以下顺序:

  1. 调用lua_pcall(L, 0, 0, 0)而不检查返回值。
  2. 再次使用lua_pcall(L, 0, 0, 0)调用另一个函数,这次检查返回值。
  3. 第2步失败(实际上第1步失败了,但我没有抓住它),并调用lua_close(L);
  4. lua_close(L)期间,内存被释放。在此阶段,内存管理器检测到堆损坏,并且固件崩溃。

我想问一下,在什么情况下Lua状态可以无效? (因此,不允许执行其他任何操作。)

  • lua_close()总是安全吗?
  • 如果lua_pcall()失败,是否可以再次使用lua_pcall()调用另一个函数?
  • 如果lua_pcall()因“内存不足”而失败,是否可以对内存状态做出任何假设?可以调用lua_close()或其他Lua API函数吗?

0 个答案:

没有答案