2015-11-04 71 views
-1

我创建用下面的代码文件恐慌错误而读取文件LUA

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(尝试索引布尔值)

+0

问题寻求帮助调试(“为什么不是这个代码工作?“)必须包含所需的行为,特定的问题或错误以及在问题本身中重现问题所需的最短代码。没有明确问题陈述的问题对其他读者无益。请参阅:如何创建最小,完整和可验证示例。 – Olaf

+0

你不明白什么?在旧的代码读取之前,罚款,但现在改变后发生恐慌错误。错误调试'lua_getfield(L,-1,“TimeAdd”);' – Chozie

+0

至少你应该表示礼貌,仔细阅读我的评论。 – Olaf

回答

2

单步执行代码,随着时间的推移可视化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")

+0

谢谢上校,现在正在工作。我是卢亚新人,有些东西让我有更多的关于尊重的信息? – Chozie

+0

@Chozie如果你还没有,请尝试阅读Lua书。 (旧版本可以在http://www.lua.org/pil/contents.html在线获得 - 稍微过时了一些,但仍然是最相关的。)另外有用的是阅读用C语言编写的Lua库的源代码,参见例如。 Lua内置库的[Lua源代码](http://www.lua.org/source/5.3/)中的“库”部分,或任何其他您通过luarocks使用或找到的库。 (并不是所有你会发现的都是很好的代码,但是如果你看到很多不同的东西,你可能会看到一些很好的代码。) – nobody