私はKahluaを組み込みのLuaスクリプトに使用するJavaアプリケーションを開発しています。多くの関数を呼び出した後、スタックオーバーフローで常にクラッシュします...スタックから未使用のコールフレームを削除するために必要なことはありますか?Luaのスタックオーバーフロー
答えて
を、あなたはLuaのスタックから項目を削除するlua_pop
機能を使用することができます。この使用に関するヒントについては、this answerを参照してください。
あなたが繰り返しあなたのコードを呼び出している場合は、一番簡単な方法は、処理の前に、スタックの高さを保存し、後でそれを復元です:
int top = lua_gettop(L);
... /* some processing involving the stack*/
lua_settop(L, top);
今、私はこれを達成するかどうかはわかりませんカールーアでしかし、ソースで私はLuaCallFrame.getTop()
とLuaCallFrame.setTop()
を参照するので、コードは似ているはずです。
すべてのメソッド呼び出しから必ず戻ります。たとえば:すべてのコールバックベースレベルに戻る
...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(){
....
}
この方法:
...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();
}
スタックが爆破ないようにする方法は、このような何かを行うことです。
私は、Javaのものではなく、Luaスタックのオーバーフローについて話しています。 – phpscriptcoder
とにかく同じことがluaに適用されます。 – daurnimator
試してみて、彼らはスタックスロットを占有していないあなたが、できる末尾再帰を使用:標準のLuaで
function foo ()
return bar()
end
私の問題は、スクリプトが多すぎるスタックスロットを使用するのではなく、繰り返し実行すると同じコードがスタックをいっぱいにすることです。私が知る必要があるのは、コールをスタックから削除する方法です。 – phpscriptcoder
Kahluaフレームワークを正しく使用している場合、関数から戻るとスタックは自動的にクリーンアップされます。これがそうでない場合は、バグを見つけました。バグレポートが非常に好きです:)
問題を明らかにする最小限のテストケースです。
- 1. スタックオーバーフローのスタックオーバーフロー
- 2. コンパイラのスタックオーバーフロー
- 3. SWAP中のスタックオーバーフロー
- 4. SAMLのスタックオーバーフロー?
- 5. IEのスタックオーバーフロー...
- 6. スタックオーバーフローのライブデバッグ
- 7. Flash AS3のスタックオーバーフロー
- 8. .NETスタックオーバーフロー?
- 9. Eclipse JSPエディタのスタックオーバーフロー
- 10. 防止スタックオーバーフロー
- 11. $ .colorbox.resizeでスタックオーバーフロー
- 12. ToArray()でスタックオーバーフロー
- 13. 保存とスタックオーバーフロー
- 14. スタックオーバーフローBACKBONE.JSモデル
- 15. 奇妙なスタックオーバーフロー?
- 16. LuaでのLuaの処理方法C
- 17. Luaの
- 18. Luaの
- 19. LUA
- 20. LUA
- 21. haskellでのスタックオーバーフローのデバッグ
- 22. スタックオーバーフローの質問タグのテキストボックス
- 23. Rustでのスタックオーバーフローのデバッグ
- 24. 古典的なスタックオーバーフロー?
- 25. FreeRTOS過剰なスタックオーバーフロー
- 26. スタックオーバーフロー - バッファ場所メモリ
- 27. クイックソートとスタックオーバーフローの例外
- 28. Luaの - JSON
- 29. Luaテーブルのメモリリーク?
- 30. Luaのコールバックが
詳細については、私たちはこれに答えることはできません。 – orlp
ご理解にご迷惑をおかけして申し訳ありません。私は自分のイベントシステムを使用しています。スクリプトはlink()グローバル関数を使用してフックを追加できます。イベントを呼び出す必要がある場合、プログラムはそれにリンクされているすべてのLua関数を調べ、適切な引数を使用して呼び出します。しかし、あまりにも多くのイベントを呼び出した後、Luaライブラリ(Javaではなく)はスタックのオーバーフローについて不平を言っています。 – phpscriptcoder
Kahluaについてのこの質問にはなぜluajが付いていますか? – PhiLho