我花了几个小时试图使其无法成功运行。我有一个C ++程序,其功能公开给Lua脚本。 Lua脚本是这样使用的:
setData('type', {a=1, b=2, c=3})
所以第一个参数是字符串,第二个参数是表。
我当前最好的C ++ setData函数版本如下:
string sType;
map<string, uint8_t> mOptions;
int nArgs = lua_gettop(i_pState);
if (nArgs == 2)
{
if (lua_isstring(i_pState, 1) != 0)
sType = lua_tostring(i_pState, 1);
if (lua_istable(i_pState, 2) != 0)
{
lua_pushnil(i_pState);
while(lua_next(i_pState, 2))
{
uint8_t nValue = uint8_t(lua_tonumber(i_pState, -1));
string sKey = lua_tostring(i_pState, -2);
mOptions[sKey] = nValue;
lua_pop(i_pState, 1);
}
lua_pop(i_pState, 1);
}
}
return 0;
它工作正常,但随后在调用lua_close()
函数时最终导致“ program.exe触发了断点”错误。
此代码有什么问题?
UPD1。不处理第二个参数就不会出错。
UPD2。我的代码表现得很奇怪。我认为这可能是将extern "C"
和C ++代码混合在一起的问题。
UPD3。原来这是堆损坏。我不明白原因在哪里。可能这根本与lua无关。
答案 0 :(得分:0)
最后!将Lua代码重新编译为C ++代码不起作用(肯定的是,我不必担心RSpec.describe Booking, type: :model do
it { should belong_to(:user) }
it { should belong_to(:ride) }
)。但是我发现了两个多余的extern "C"
调用。我删除了它们,现在工作正常。
我没想到Lua会如此危险!