Je suis en train de développer une application Java qui utilise Kahlua pour les scripts Lua intégrés. Après avoir appelé beaucoup de fonctions, il se bloque toujours avec un débordement de pile ... y a-t-il quelque chose que je dois faire pour supprimer les trames d'appel inutilisées de la pile?Lua Stack Overflow
Répondre
Dans Lua standard, vous pouvez utiliser la fonction lua_pop
pour supprimer des éléments de la pile Lua. Voir this answer pour des conseils sur cette utilisation.
Si vous appelez votre code à plusieurs reprises, la meilleure chose à faire est de stocker la hauteur de la pile avant le traitement et la restaurer après:
int top = lua_gettop(L);
... /* some processing involving the stack*/
lua_settop(L, top);
Maintenant, je ne suis pas sûr de savoir comment y parvenir à Kahlua. Mais dans la source, je vois LuaCallFrame.getTop()
et LuaCallFrame.setTop()
donc le code devrait être similaire.
Vous devez vous assurer que vous revenez de chaque appel de méthode. Par exemple:
...main(...){
displayMenu();
}
void displayMenu(){
System.out.println("1.Do A. \n2.Do B");
int q = readInt;
if (q==1){
doA();
}else{
doB();
}
}
void doA(){
.....
displayMenu()
}
void doB(){
....
displayMenu();
}
Une façon de rendre la pile ne sauter est de faire quelque chose comme ceci:
...main(...){
while(true){displayMenu()};
}
void displayMenu(){
System.out.println("1.Do A. \n2.Do B");
int q = readInt;
if (q==1){
doA();
}else{
doB();
}
}
void doA(){
.....
}
void doB(){
....
}
De cette façon, tous les appels de retour en arrière au niveau de base.
Je parle d'un dépassement de pile Lua, pas d'un Java. – phpscriptcoder
même s'applique à Lua de toute façon. – daurnimator
Essayez d'utiliser la queue des appels où vous pouvez, ils ne prennent pas une fente de la pile:
function foo ()
return bar()
end
Mon problème n'est pas qu'un script utilise trop d'emplacements de pile, mais que le même code remplit la pile s'il est répété. Tout ce que j'ai besoin de savoir, c'est comment supprimer les appels de la pile après que j'en ai fini avec eux. – phpscriptcoder
Si vous utilisez correctement le framework Kahlua, la pile doit automatiquement être nettoyée lors du retour d'une fonction. Si ce n'est pas le cas, vous avez trouvé un bug, et j'aimerais beaucoup avoir un rapport de bogue dessus :)
Le mieux serait un (presque) testcase minimal qui expose le problème.
- 1. erreur Stack Overflow Jquery
- 2. Stack overflow la cause
- 3. MPMoviePlayerController Stack Overflow
- 4. Stack Overflow dans Jboss
- 5. OpenID comme Stack Overflow
- 6. Site mobile comme Stack Overflow
- 7. Stack Overflow problème, Asp.net MVC
- 8. site léger similaire à Stack Overflow
- 9. Message d'en-tête comme à Stack Overflow
- 10. UVa 3n + 1 cas récursif Stack Overflow
- 11. Stack Overflow - Tampon emplacement en mémoire
- 12. Balise complète automatique comme Stack Overflow
- 13. Comment Stack Overflow reflète-t-il ce que vous tapez?
- 14. Liste des questions avec tag avec l'API Stack Overflow
- 15. Stack Overflow lors du débogage application dans le simulateur iPhone
- 16. Comment recréer la barre de bienvenue de Stack Overflow
- 17. Comment fonctionne le système de connexion de Stack Overflow?
- 18. Stack Overflow en Java QuickSort sur la matrice
- 19. Mots-clés de style de style Stack Overflow
- 20. API Stack Overflow: obtenez le "nouveau courrier" de l'utilisateur! notification?
- 21. Pourquoi urllib.urlopen ne semble pas fonctionner avec Stack Overflow?
- 22. StructureMap Class Chaining - Stack Overflow ou d'autres erreurs
- 23. Comment afficher un message contextuel comme dans Stack Overflow
- 24. Stack Overflow fonctionne mieux avec JavaScript activé bannière
- 25. Ajout d'un bouton personnalisé à l'éditeur WMD (Stack Overflow)
- 26. Comment créer une pagination comme Stack Overflow site
- 27. Système de vote Stack Overflow/reddit en php
- 28. Comment créer un processus d'enregistrement semblable à Stack Overflow?
- 29. Balises survolant Stack Overflow à l'aide de jQuery
- 30. Documentation pour le graphique de réputation Stack Overflow (Flot)
S'il vous plaît donner plus d'informations, nous ne pouvons pas répondre à cela. – orlp
Je suis désolé que vous ayez eu du mal à comprendre. J'utilise mon propre système d'événements. Les scripts peuvent utiliser la fonction globale link() pour ajouter un hook. Lorsqu'un événement doit être appelé, le programme passe par toutes les fonctions Lua qui lui sont liées et les appelle en utilisant les arguments appropriés. Cependant, après avoir appelé trop d'événements, la bibliothèque Lua (pas Java) se plaint du débordement de la pile. – phpscriptcoder
Pourquoi cette question est-elle étiquetée luaj s'il s'agit de Kahlua? – PhiLho