We have a problem in our project,we use lua 5.1 as our scripting language.
但是当在一个函数中使用 lua_pushnumber 从 C++ 向 lua 传递太多数据时,lua 堆栈看起来像堆栈溢出,导致 C++ 中的其他部分内存已写入,并且在回调返回 C++ 时导致我们的系统崩溃。我想知道是否有一些参数可以控制lua堆栈大小的大小。我尝试更改在 lua.h 中定义的参数 LUA_MINSTACK,但似乎不起作用。我也尝试使用 lua_checkstack() 来避免将太多数字推送到 lua 堆栈,但它也不起作用
getNineScreenEntity(lua_State* L)
{
DWORD screenid = GET_LUA_VALUE(DWORD,1)
struct EntryCallback : public ScreenEntityCallBack
{
EntryCallback(){ }
bool exec(ScreenEntity * entity)
{
list.push_back(entity)
return true;
}
std::vector<ScreenEntity*> list;
};
EntryCallback exec;
Screen* screen = ScreenManager::getScreenByID(screenid);
if (!screen)
return 0;
screen->execAllOfScreenEntity(exec);
int size = 0;
std::vector<ScreenEntity*>::iterator vit = exec.list.begin();
for (; vit != exec.list.end(); ++vit)
{
lua_pushnumber(L,(*vit)->id);
++size;
}
return size;
}
似乎当一个屏幕中有太多实体时,我们的程序会崩溃。