J'ai récemment trébuché dans ce ce C++/erreur LuaStack déroulant en C++ lors de l'utilisation Lua
int function_for_lua(lua_State* L)
{
std::string s("Trouble coming!");
/* ... */
return luaL_error(L,"something went wrong");
}
L'erreur est que luaL_error
utilisation longjmp
, de sorte que la pile est jamais déroulé et s
est jamais détruit, une fuite de mémoire. Il y a quelques autres API Lua qui ne parviennent pas à dérouler la pile.
Une solution évidente est de compiler Lua en mode C++ avec des exceptions. Moi, cependant, je ne peux pas, car Luabind a besoin du standard C ABI.
Ma pensée actuelle est d'écrire mes propres fonctions qui imitent les parties gênants de l'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());
}
Ma question: Est-pile de function_for_lua
correctement déroulé. Quelque chose peut-il aller mal?
Je suis confus lorsque vous avez mentionné Luabind. Luabind lui-même est une bibliothèque C++, mais il semble que vous ne l'utilisiez pas de toute façon? – dvide