Recientemente me encontré en esta presente en C++/Lua errorPila de relajarse en C++ al utilizar Lua
int function_for_lua(lua_State* L)
{
std::string s("Trouble coming!");
/* ... */
return luaL_error(L,"something went wrong");
}
El error es que luaL_error
uso longjmp
, por lo que la pila no se desenrolla y se s
no se destruye, fugas de memoria. Hay algunas API de Lua más que no pueden desenrollar la pila.
Una solución obvia es compilar Lua en modo C++ con excepciones. Yo, sin embargo, no puedo, ya que Luabind necesita el C ABI estándar.
Mi pensamiento actual es escribir mis propias funciones que imitan las partes problemáticas de la API Lua:
// just a heads up this is valid c++. It's called a function try/catch.
int function_for_lua(lua_State* L)
try
{
/* code that may throw Lua_error */
}
catch(Lua_error& e)
{
luaL_error(L,e.what());
}
Así que mi pregunta: ¿Es function_for_lua
's pila adecuadamente desenrollado. ¿Puede pasar algo?
Estoy confundido cuando mencionas Luabind. Luabind en sí es una biblioteca de C++, pero parece que no la está usando de todos modos. – dvide