2010-10-01 165 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