【问题标题】:Panic error while reading file lua读取文件 lua 时出现紧急错误
【发布时间】:2016-02-05 14:47:01
【问题描述】:

我用以下代码创建了一个文件

Request = {
  TimeAdd = true;
  DaysAdd = true;
};

源代码是用C编写的

    lua_getglobal(L, "Request")
    lua_getfield(L, -1, "TimeAdd");

       time_request = lua_toboolean(L, -1);

    lua_getfield(L, -1, "DaysAdd");
        data_request = lua_toboolean(L, -1);

我做程序的编译一般比较多会出现lua错误

LUA PANIC:调用 Lua API 时出现不受保护的错误(尝试索引布尔值)

【问题讨论】:

  • 寻求调试帮助的问题(“为什么这段代码不起作用?”)必须包括所需的行为、特定的问题或错误以及在问题本身中重现它所需的最短代码。没有明确问题陈述的问题对其他读者没有用处。请参阅:如何创建最小、完整和可验证的示例。
  • 你不明白什么?以前旧代码阅读还可以,但现在改后出现panic错误。调试错误lua_getfield(L, -1, "TimeAdd");
  • 至少你应该礼貌地仔细阅读我的评论。
  • 编辑了主题解释更好,现在明白了吗?
  • 试试lua_getfield(L, -2, "DaysAdd");

标签: c lua lua-api


【解决方案1】:

单步执行代码,可视化 Lua 堆栈,错误将变得明显。

lua_getglobal(L, "Request"); // Stack: [] -> [(Request table)]
lua_getfield(L, -1, "TimeAdd"); // [>(Request table)<] -> [(Request table), true]

time_request = lua_toboolean(L, -1); // [(Request table), >true<]

lua_getfield(L, -1, "DaysAdd"); // [(Request table), >true<] ERROR: Cannot index `true`

调用lua_getfield(L, -1, "DaysAdd")时,栈顶是值true,不可索引。

要么在获取 DaysAdd (lua_pop(L, 1)) 之前从堆栈中弹出 true 值,要么将堆栈索引调整为 lua_getfield 以指向请求表 (lua_getfield(L, -2, "DaysAdd"))

【讨论】:

  • 谢谢上校,现在可以了。我是 lua 的新手,有一些东西可以让我了解更多关于尊重的内容吗?
  • @Cozie 如果您还没有,请尝试阅读 Lua 书。 (旧版本可在lua.org/pil/contents.html 在线获得 - 现在稍微过时了,但仍然主要相关。)阅读用 C 编写的 Lua 库的源代码也很有用,参见例如Lua source 的“库”部分用于 Lua 的内置库,或者您使用或通过 luarocks 找到的任何其他库。 (并不是所有你能找到的都是好代码,但如果你查看许多不同的东西,你也可能会看到一些好代码。)
猜你喜欢
  • 2017-04-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-03
  • 1970-01-01
相关资源
最近更新 更多