我在微控制器环境中使用Lua,最近我发生了一些与堆数据损坏有关的崩溃。
该问题被跟踪为以下顺序:
lua_pcall(L, 0, 0, 0)
而不检查返回值。lua_pcall(L, 0, 0, 0)
调用另一个函数,这次检查返回值。lua_close(L)
; lua_close(L)
期间,内存被释放。在此阶段,内存管理器检测到堆损坏,并且固件崩溃。我想问一下,在什么情况下Lua状态可以无效? (因此,不允许执行其他任何操作。)
lua_close()
总是安全吗?lua_pcall()
失败,是否可以再次使用lua_pcall()
调用另一个函数?lua_pcall()
因“内存不足”而失败,是否可以对内存状态做出任何假设?可以调用lua_close()
或其他Lua API函数吗?