我的定义如下:
#define namef (s, r, x) (p_name ((s), (r), (x)))
我的文件lua如下:
tbl= {
name_func = module;
};
我的代码如下:
void getname(void) {
lua_State *L = luaL_newstate();
luaL_openlibs(L);
char *arc = "luafun.lua";
if (luaL_dofile(L, arc)) {
printf("Error in %s", arc);
return;
}
lua_getglobal(L, "tbl");
lua_getfield(L, -1, "name_func");
namef(r_name, lua_tostring(L, -1), sizeof(r_name));
lua_close(L);
printf("done");
}
r_name是一个数组char r_name [11];
但它出现以下错误:
PANIC: unprotected error in call to Lua API (attempt to index a nil value)
我不知道为什么会发生这种情况,在C正常工作中,更多的是发生更改为lua错误
答案 0 :(得分:2)
首先,你发布了许多与问题完全无关的东西。我们不需要查看p_name
或您的宏或任何与Lua错误无关的内容。见:volume is not precision。作为解决这个问题的一部分,你应该删除多余的东西,直到你有最小的代码片段来重现问题。你最终会得到这样的东西:
lua_State *L = luaL_newstate();
if (luaL_dofile(L, lua_filename)) {
return;
}
lua_getglobal(L, "tbl");
lua_getfield(L, -1, "name_func");
问题是找不到您的文件。每the manual,如果有错误,luaL_dofile会返回true
,如果没有错误,则返回false
。
如果找到该文件,您的程序将中止。只有当文件未找到时,它才会尝试索引tbl
,但它不能,因为该全局变量不存在。