在什么情况下,lua_close会引发Segmentation Fault错误?

我在谈论Lua-C API。调用lua_close(lua_State *)会导致分段错误,即使状态是有效的。如何知道状态是有效的?因为到那个点我已经正确使用了它。

我想发布源代码,但它太长了,而且我不确定它是否有用。它只是在我的面前抛出分段错误,并且我不知道原因。在调用之前,Lua堆栈为空。有人能帮我吗?

原文链接 https://stackoverflow.com/questions/7427969

点赞
stackoverflow用户221509
stackoverflow用户221509

Lua C API 不应该导致分段错误。如果在调用 lua_close 时发生分段错误,则最可能的原因是一些带有自定义 __gc 元方法的 userdata 失败。从 lua_close 的文档中可以看到:

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

确定这些分段错误的原因的最好方法是在出现问题时运行 gdb 并获得回溯。如果您使用调试符号编译库,您应该能够准确地找到引起错误的位置。

2011-09-15 09:33:44
stackoverflow用户107090
stackoverflow用户107090

你说在调用之前 Lua 栈是空的。但是要调用的函数是否在栈上呢?即使你调用lua_call(L,0,0),它也应该在栈上。尝试使用 API 断言重新构建 Lua。这可能会给您更好的错误消息。

你说在调用之前 Lua 栈是空的。但是要调用的函数是否在栈上呢?即使你调用`lua_call(L,0,0)`,它也应该在栈上。尝试使用 API 断言重新构建 Lua。这可能会给您更好的错误消息。 
2011-09-15 10:50:05