例如,当我们调用say,recursion函数时,连续的调用被存储在堆栈中。 但是,如果无限地发生错误,则错误是“分段错误”(如GCC上所示)。 它不应该是“堆栈溢出”? 那么两者的基本区别是什么呢? 顺便说一句,解释将比维基百科链接更有用(通过了,但没有答案的具体查询)。
我正在使用Swing在Java中编写应用程序。 我正在尝试实现function,以保存和加载模拟状态,在我正在运行的模拟。 整个模拟保持为一个对象,与Swing断开连接。 我想用这段代码序列化我的模拟类: public void saveSimulationState(String simulationFile) { try { Serializable object = this.sm; ObjectOutputStream objstream = new ObjectOutputStream(new FileOutputStream(simulationFile)); objstream.writeObject(object); objstream.close(); } catch (IOException e) { System.out.println(e.getMessage()); } } 但我得到以下错误(这是巨大的)。 Exception in thread "AWT-EventQueue-0" java.lang.StackOverflowError at java.io.ObjectStreamClass.processQueue(ObjectStreamClass.java:2234) at java.io.ObjectStreamClass.lookup(ObjectStreamClass.java:266) at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1106) at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1509) at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1474) at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1392) at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1150) at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:326) at java.util.ArrayList.writeObject(ArrayList.java:570) […]
什么会导致java.lang.StackOverflowError ? 我得到的堆栈打印不是很深(只有5种方法)。
我想阻止或处理一个StackOverflowException,我从一个Xsl编辑器中调用XslCompiledTransform.Transform方法得到我写的。 问题似乎是用户可以写一个无限recursion的Xsl脚本,它只是在调用Transform方法的时候爆发了。 (也就是说,问题不仅仅是典型的程序错误,这通常是这种例外的原因。) 有没有办法检测和/或限制允许多lessrecursion? 或者任何其他的想法,以防止这些代码只是吹了我?
我得到了一个recursion调用的方法,抛出一个堆栈溢出exception。 第一个调用被try catch块包围,但是exception没有被捕获。 堆栈溢出exception的行为是否有特殊的方式? 我能捕捉/处理exception吗? 注意:如果相关: 在主线程中不会抛出exception 代码抛出exception的对象由Assembly.LoadFrom(…)。CreateInstance(…)手工加载。
什么是StackOverflowError ,是什么原因造成的,我该如何处理它们?