使用lua_pushnumber时可以调整堆栈的最大大小吗?

问题描述 投票:1回答:2
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; }

似乎在一个屏幕中有太多实体时,我们的程序将崩溃。

我们在项目中遇到问题,我们使用lua 5.1作为脚本语言。但是,当使用lua_pushnumber在一个函数中将太多数据从C ++传递到lua时,lua堆栈看起来像是堆栈溢出...

lua stack-overflow
2个回答
2
投票
也许这会有所帮助(来自Lua 5.2手册)

0
投票
您应先检查Lua堆栈,然后再将其推入堆栈。默认情况下,堆栈大小为20,如果需要更多空间,则应手动放大。Lua manual
© www.soinside.com 2019 - 2024. All rights reserved.