【发布时间】:2011-11-20 09:30:20
【问题描述】:
如果有人向我解释当从 C 调用的 lua 函数返回两个表或其中包含嵌套表的表时 lua-C 堆栈的工作原理,我将非常感激
当我尝试这样做时,它看起来不错,但只是乍一看:
if ( lua_istable(L, -1) )
printf("its OK\n");
if ( lua_istable(L, -2) )
printf("its OK\n");
lua_pushnil(L);
while ( lua_next(L, -2) )
{
if(lua_isnumber(L, -1))
{
int i = (int)lua_tonumber(L, -1);
const char *key = lua_tostring(L, -2);
printf("%d %s \n", i, key);
}
lua_pop(L, 1);
}
lua_pop(L, 1);
在这种情况下,我收到两条消息,第一个表在级别 -1,第二个在级别 -2,但是在此代码之后,当我尝试获取下一个表时,我的程序崩溃 当我检查表存在的堆栈时
for ( int i = -2; ; --i)
if ( lua_istable(L, i) )
printf("its %d OK\n", i);
我得到以下结果:
its -233 OK
its -645 OK
its -1245 OK
its -1549 OK
its -2807 OK
its -2815 OK
its -2816 OK
有人可以帮我解决这个问题吗?
【问题讨论】: