Luaのを使用する際にC ++でスタックの巻き戻し
-
25-09-2019 - |
質問
私は最近、このC ++ / Luaのエラーこのにつまずいた。
int function_for_lua( lua_State* L )
{
std::string s("Trouble coming!");
/* ... */
return luaL_error(L,"something went wrong");
}
エラーはそのluaL_error
利用longjmp
なので、スタックが巻き戻さとs
決して破壊されることはありません、メモリをリークします。スタックの巻き戻しに失敗し、さらにいくつかのLuaのAPIがあります。
1つの明白な解決策は、例外を除いてC ++モードでのLuaをコンパイルすることです。私は、しかし、Luabindは、標準C ABIを必要とすることはできません。
私の現在の考えはLuaのAPIの模倣面倒な部分というのが私の自身の関数を書くことです
// 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());
}
だから私の質問は:function_for_lua
のスタックが適切に解放されます。ことができる何かを行く間違った?
解決
私が投げる例外を正しくキャッチし、とにかく翻訳されていることをLuabind
機能を、正しく理解していれば。 (参照を参照。)
だから、単に標準の例外をスローします:
void function_for_lua( lua_State* L )
{
std::string s("Trouble coming!");
/* ... */
// translated into lua error
throw std::runtime_error("something went wrong");
}
<サブ> 免責事項:私はLubindを使用したことがありません。 サブ>
所属していません StackOverflow