2010-10-01 16 views
-2

我怎麼處理堆棧溢出異常在我發生的遊戲中發生時,我玩儘可能的遊戲plz答覆?我該如何處理我的遊戲中的堆棧溢出異常?

+2

不要無限遞歸。 – bzlm 2010-10-01 09:47:35

+3

我在我的代碼中有錯誤如何讓它停止? – 2010-10-01 09:52:05

+0

@bzlm您的評論是否提及問題標題包含「堆棧溢出」這個短語的事實? ;) – 2010-10-01 15:10:21

回答

3
try 
{ 
    //your work 
} 
catch(StackOverflowException ex) 
{ 
    // handle it 
} 
+0

CLR?你的意思是JVM? :) – bzlm 2010-10-01 09:48:13

+0

.WriteLine(或Java等價物)需要堆棧空間。這是否會工作100%?我相當懷疑它。 – 2010-10-01 09:49:48

+0

@Lasse V. Karlsen @bzlm更新了 – 2010-10-01 09:55:33

3

嗯,說白了,你可能不應該試圖手柄堆棧溢出異常。

在某些情況下,你不能響應堆棧溢出異常執行代碼,因爲這些代碼需要堆棧空間,這是不可用的,因此雙誤。

相反,你應該改變的代碼,從而完全避免它。

這可能意味着改變你的算法,一些其他的算法,或可能實現在自己的堆棧基於堆棧的遞歸併切換到一個循環來代替。

1

堆棧溢出是最經常涉及到遞歸調用,而不是GC。

GC會給你帶來內存不足的異常。

public static void main(String args[]) 
{ 
     try 
    { 
      LongRecursiveMethodOrSomethingLikeThat(); 
     } catch(StackOverflowError t) { 
      // Generic catch// catch(Error e) 
      // anything: catch(Throwable t) 
      System.out.println("Error:"+t); 
      t.printStackTrace(); 
} 
+0

這是安全的嗎?堆棧是否展開以便實際上在catch塊中具有堆棧空間?如果不是,你怎麼稱呼任何東西? – 2010-10-01 10:29:12

+0

@Lasse V. Karlsen:我明白你來自哪裏。它不太可能在捕獲報表中發揮作用。理想情況下,發生Stackflow時,應該讓應用程序崩潰。 – 2010-10-01 11:11:36

+0

請注意,我不知道:)我只是問,在.NET中,你不能假設你有任何調用的堆棧空間,但在Java中,例如,你可能會從堆棧中退出堆棧的異常返回到catch塊,因此釋放了足夠的空間來執行代碼。 – 2010-10-01 11:14:28