2015-11-04 68 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