We have a problem in our project,we use lua 5.1 as our scripting language.
しかし、lua_pushnumber を使用して 1 つの関数で 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;
}
1 つの画面にエンティティが多すぎると、プログラムがクラッシュするようです。