仔细看了崩溃的代码以后,发现了一点蛛丝马迹:
在luaopen_testlua函数里的的调用如下:
lua_newtable----->lua_createtable---->luaH_new,在这个函数里可以看到这些:
Table *luaH_new (lua_State *L, int narray, int nhash)
{
Table *t = luaM_new(L, Table);
luaC_link(L, obj2gco(t), LUA_TTABLE);
t->metatable = NULL;
t->flags = cast_byte(~0);
/* temporary values (kept only if some malloc fails) */
t->array = NULL;
t->sizearray = 0;
t->lsizenode = 0;
t->node = cast(Node *, dummynode); // 注意这里
setarrayvector(L, t, narray);
setnodevector(L, t, nhash);
return t;
}
注意t->node = cast(Node *, dummynode);这一行。