Supongamos la siguiente situación:Lua: la recolección de basura + datos de usuario
typedef struct rgb_t {float r,g,b} rbg_t;
// a function for allocating the rgb struct
rgb_t* rgb(r,g,b) {
rgb_t* c = malloc(sizeof(rgb_t));
c->r=r;
c->g=g;
c->b=b;
return c;
}
// expose rgb creation to lua
int L_rgb (lua_State* L) {
rgb_t** ud = (rgb_t **) lua_newuserdata(L, sizeof(rgb_t *));
*ud = rgb(lua_tonumber(L,1),lua_tonumber(L,2),lua_tonumber(L,3));
return 1;
}
Cuando la función se llama desde L_rgb Lua suceda dos asignaciones. Lua asigna nuevos datos de usuario y la función del constructor rgb asigna para la estructura. ¿Qué sucede con la variable userdata cuando la variable queda fuera de alcance en Lua? Si es basura, ¿qué ocurre con la asignación de la estructura?
El Método n.º 2 lo liberará de las asignaciones de seguimiento: en los errores de Lua y en los rebobinados de pila, el GC de Lua seguirá rastreando y liberando los bloques de códigos según corresponda. – u0b34a0f6ae
¿Hay algún cambio que pueda ayudar aquí: http://stackoverflow.com/questions/41080633/can-i-load-additional-functions-in-base-open-without-breaking-lua-state? – displayname