抱歉,刚才用了自动排版,都乱了,只好重发 请教一个Lua的问题,麻烦你了。 我要从C的函数里给Lua脚本返回一个数组,我是这么写的: 『More Lines』
谢谢两位的回复。但是看起来不是这些原因: 1.堆栈肯定没有溢出,栈里始终不过2个元素而以:table和value,执行lua_rawseti 之后就只有table一个元素了 2.更加有趣的是,我在数组里插入一个下标为0的元素就正常了,尽管这个元素在Lua里根本看不到: lua_newtable(L);//创建表 lua_pushnumber(L,-11);//随便放一个没用的数值 lua_rawseti(L,-2,0);//设置t[0]=v? 这个元素在Lua里遍历不到 lua_pushnumber(L,1);//把value压入 lua_rawseti(L,-2,1);//设置t[1]=v lua_pushnumber(L,2); lua_rawseti(L,-2,2); lua_pushnumber(L,3); lua_rawseti(L,-2,3); return 1; Lua代码还一样: data = testext.Test() for i=1,table.getn(data),1 do print(data [i]) 这里getn返回的是3而不是4,print输出的元素正好是t[1],t[2],t[3] 有趣的是,如果我用t[0]访问,这个元素也能得到。 我一定是对Lua的这套规则理解还有问题,请指教。 另外我在另一个程序里调用luaopen_io(L); 崩溃了。 lua_State *L = lua_open(); /* opens Lua */ luaopen_base(L); /* opens the basic library */ luaopen_table(L); /* opens the table library */ luaopen_io(L); //这句话一执行就崩溃了。平台是xp,版本5.1 luaopen_string(L); /* opens the string lib. */ luaopen_math(L); /* opens the math lib. */
use luaL_openlibs(L) replace luaopen_* - 回复 | (1297) | neverSeen | 2006-11-03 01:00:33
use luaL_openlibs(L) replace luaopen_* - 回复 | (1296) | neverSeen | 2006-11-03 12:59:11
> 堆栈肯定没有溢出还是用lua_gettop(L)检查一下吧, 因为你在embed testext.Test() 之前的其他操作(luaopen_base(L), luaopen_table(L), etc.)也会导致栈的增长, 5.0.2默认的栈的大小是45, 不小心很容易超的.另外, 我刚才试了一下你的代码, 是可以正确打印的.FYI. - 回复 | (1227) | al_lea | 2006-08-17 11:16:11
用lua_gettop检查过的,的确是2或者1 而且Lua的手册上说,这里的L是临时分配的,所以它应该并没有跟luaopen_base共用一个L呀。 不知道为什么在我的机器上就不行,mail list上的人给的可能我都试演过了, 『More Lines』- 回复 | (1229) | jason | 2006-08-17 09:54:29
应该可以. 方便的话, 发份代码过来(abrash_han@163.com) thanks.- 回复 | (1230) | al_lea | 2006-08-18 07:58:23
你这几行代码没有错,但是我相信 lua 在这方面也没有 bug . 所以你需要检查别的方面导致的 bug 。例如 crt 不一致等等。
ps. lua 5.1 可以自定义内存分配器。 - 回复 | (1223) | 云风 | 2006-08-17 01:44:25
我是曾赠,请和我交个友吧? - 回复 | (1287) | 曾赠 | 2006-10-19 12:49:16