在什么条件下lua_close会引发分段错误错误?

时间:2011-09-15 08:31:32

标签: c lua

我在谈论Lua-C API。即使状态有效,对lua_close(lua_State *)的调用也会导致分段错误。我怎么知道州是有效的?因为到目前为止我已正确使用它。

我会发布消息来源,但它太长了,我不确定它会有所帮助。它只是向我抛出一个分段错误错误,我不知道为什么。在呼叫之前,Lua堆栈是空的。有人可以帮帮我吗?

2 个答案:

答案 0 :(得分:1)

Lua C API永远不会导致分段错误。如果在调用lua_close时发生了段错误,最可能的原因是某些带有自定义__gc元方法的用户数据失败。来自lua_close的文档:

  

销毁给定Lua状态下的所有对象(调用相应的垃圾收集元方法,如果有的话)

确定这些段错误的原因的最佳方法是运行gdb并在发生时获得回溯。如果使用调试符号编译库,则应该准确到达导致错误的位置。

答案 1 :(得分:0)

你说在通话之前Lua堆栈是空的。但是要在堆栈上调用函数吗?它应该是,即使你打电话给lua_call(L,0,0)。尝试使用API​​断言重建Lua。它可能会给你一个更好的错误信息。