We have a problem in our project,we use lua 5.1 as our scripting language.
Mais lors de l'utilisation lua_pushnumber de passer trop de données de C++ pour Lua dans une fonction , pile de lua semble stackoverflow et cause autre partie du momery dans C++ a été écrit, et cela provoque un plantage de notre système lorsque le callback retourne en C++. Je veux savoir s'il y a quelques paramètres pour contrôler la taille de la taille de la pile lua .J'essaie de changer le paramètre LUA_MINSTACK qui a été défini dans lua.h, mais il semble ne pas fonctionner.J'essaie aussi d'utiliser lua_checkstack() pour éviter de pousser trop numéro à pile de Lua, mais il ne fonctionne pas aussiPuis-je redimensionner la taille maximale de la pile lors de l'utilisation lua_pushnumber
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;
}
il semble que quand il y a trop d'entités dans un seul écran, notre programme se bloque.
Combien d'objets essayez-vous de pousser sur la pile? Qu'est-ce qui ne fonctionne pas à propos de ce que vous faites? Quelles erreurs obtenez-vous? Montrez-nous du code qui reproduit le problème. –
Tout d'abord, si vous voulez répondre, faites-le en modifiant votre question pour ajouter l'information manquante.Plus important encore, ce n'est pas * assez * d'informations. Je n'ai aucune idée de ce que fait cette fonction, qui l'a écrit, ou quoi que ce soit de similaire. Contrôlez-vous cette fonction? Qu'est-ce qui se passe là-bas? Donnez-nous [le * code entier * qui démontre le problème.] (Http://sscce.org) –
Ok, merci pour vos conseils –