recente ho imbattuti in questo questo C errore ++/LuaStack rilassarsi in C++ quando si utilizza Lua
int function_for_lua(lua_State* L)
{
std::string s("Trouble coming!");
/* ... */
return luaL_error(L,"something went wrong");
}
L'errore è che luaL_error
uso longjmp
, quindi la pila è mai svolto e s
viene mai distrutto, perde la memoria. Vi sono altre API Lua che non riescono a svolgere lo stack.
Una soluzione ovvia è compilare Lua in modalità C++ con eccezioni. Io, tuttavia, non posso perché Luabind ha bisogno dell'ABI standard.
Il mio pensiero attuale è quella di scrivere le mie funzioni che imitano le parti fastidiosi delle 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());
}
Quindi la mia domanda è: function_for_lua
s' pila correttamente svolto. Qualcosa può andare storto?
Sono confuso quando hai menzionato Luabind. Luabind è una libreria C++, ma sembra che tu non la stia utilizzando comunque? – dvide