Gần đây tôi đã vấp vào này C++/Lua lỗistack ươm trong C++ khi sử dụng Lua
int function_for_lua(lua_State* L)
{
std::string s("Trouble coming!");
/* ... */
return luaL_error(L,"something went wrong");
}
Lỗi là luaL_error
sử dụng longjmp
, vì vậy chồng không bao giờ là unwound và s
không bao giờ được destructed, rò rỉ bộ nhớ. Có thêm một vài API của Lua không giải phóng được stack.
Một giải pháp hiển nhiên là biên dịch Lua trong chế độ C++ với ngoại lệ. Tôi, tuy nhiên, không thể như Luabind cần tiêu chuẩn C ABI.
suy nghĩ hiện tại của tôi là để viết các chức năng của riêng tôi mà bắt chước những phần phiền hà của 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());
}
Vì vậy, câu hỏi của tôi: Liệu function_for_lua
's chồng đúng unwound. Có thể có điều gì sai?
Tôi đang bối rối khi bạn đề cập Luabind. Luabind chính nó là một thư viện C++, nhưng có vẻ như bạn không sử dụng nó? – dvide