Questions tagged «stack-overflow»

不是这个网站!使用此标记可解决由于将太多项目推入调用堆栈而导致的错误。如果您对此网站有疑问,请访问https://meta.stackoverflow.com



6
Python是否优化尾部递归?
我有以下代码,失败并出现以下错误: RuntimeError:超过最大递归深度 我试图重写此代码以允许尾递归优化(TCO)。我相信,如果发生了TCO,则该代码应该会成功。 def trisum(n, csum): if n == 0: return csum else: return trisum(n - 1, csum + n) print(trisum(1000, 0)) 我是否应该得出结论,Python不执行任何类型的TCO,还是只需要以不同的方式定义它?

9
如何增加Java堆栈大小?
我问了这个问题,以了解如何增加JVM中的运行时调用堆栈大小。我已经找到了答案,并且还获得了许多有用的答案和注释,这些注释和注释与Java如何处理需要大量运行时堆栈的情况有关。我在回答摘要中扩展了我的问题。 最初,我想增加JVM堆栈的大小,以便程序运行时无需安装StackOverflowError。 public class TT { public static long fact(int n) { return n < 2 ? 1 : n * fact(n - 1); } public static void main(String[] args) { System.out.println(fact(1 << 15)); } } 相应的配置设置是java -Xss...具有足够大值的命令行标志。对于TT上面的程序,它可以与OpenJDK的JVM一起工作: $ javac TT.java $ java -Xss4m TT 答案之一还指出,这些-X...标志与实现有关。我在用 java version "1.6.0_18" OpenJDK …

2
为什么#include <string>在这里防止堆栈溢出错误?
这是我的示例代码: #include &lt;iostream&gt; #include &lt;string&gt; using namespace std; class MyClass { string figName; public: MyClass(const string&amp; s) { figName = s; } const string&amp; getName() const { return figName; } }; ostream&amp; operator&lt;&lt;(ostream&amp; ausgabe, const MyClass&amp; f) { ausgabe &lt;&lt; f.getName(); return ausgabe; } int main() { MyClass f1("Hello"); cout …

9
C#捕获堆栈溢出异常
我有一个递归调用一个引发堆栈溢出异常的方法。第一次调用被try catch块包围,但未捕获异常。 堆栈溢出异常是否以特殊方式表现?我可以正确捕获/处理异常吗? 不确定是否相关,但还有其他信息: 在主线程中没有抛出异常 代码引发异常的对象由Assembly.LoadFrom(...)。CreateInstance(...)手动加载

6
Chrome / jQuery未捕获RangeError:超出最大调用堆栈大小
我在Chrome上收到错误消息“未捕获RangeError:超出最大调用堆栈大小”。这是我的jQuery函数 $('td').click(function () { if ($(this).context.id != null &amp;&amp; $(this).context.id != '') { foo($('#docId').val(), $(this).attr('id')); } return false; }); 请注意,页面中有成千上万个单元格。但是,我通常将堆栈溢出与递归相关联,在这种情况下,据我所知没有。 创建像这样的lambda是否会自动在堆栈上产生大量负载?有什么办法吗? 目前,我唯一的解决方法是在渲染HTML时在每个单元格上显式生成onclick事件,这会使HTML更大。

7
为什么此方法打印4?
我想知道当您尝试捕获StackOverflowError并提出以下方法时会发生什么: class RandomNumberGenerator { static int cnt = 0; public static void main(String[] args) { try { main(args); } catch (StackOverflowError ignore) { System.out.println(cnt++); } } } 现在我的问题是: 为什么此方法打印“ 4”? 我以为可能是因为System.out.println()在调用堆栈上需要3个段,但是我不知道3的来源。当您查看的源代码(和字节码)时System.out.println(),通常导致的方法调用次数比3多得多(因此,调用堆栈上的3个段是不够的)。如果是由于优化而应用了Hotspot VM(方法内联),我想知道在另一个VM上结果是否会有所不同。 编辑: 由于输出似乎是高度特定于JVM的,因此我使用 Java(TM)SE Runtime Environment(内部版本1.6.0_41-b02), Java HotSpot(TM)64位服务器VM(内部版本20.14-b01,混合模式)获得了结果4。 解释为什么我认为这个问题与理解Java堆栈不同: 我的问题不是关于为什么cnt&gt; 0(显然是因为System.out.println()需要堆栈大小并且StackOverflowError在打印某些内容之前会抛出另一个),而是为什么它具有4的特定值,分别是0、3、8、55或其他值系统。
111 java  jvm  stack-overflow 

5
为什么可以从StackOverflowError中恢复?
我很惊讶即使StackOverflowError在Java中发生故障后仍可以继续执行。 我知道那StackOverflowError是Error类的一个子集。错误类Error被贬义为“ Throwable的子类,它指示严重的问题,而合理的应用程序不应尝试抓住这些问题。” 这听起来更像是一条建议,而不是一条规则,这暗示着实际上允许捕获像StackOverflowError之类的错误,这取决于程序员的合理性。看到了,我测试了这段代码,它正常终止。 public class Test { public static void main(String[] args) { try { foo(); } catch (StackOverflowError e) { bar(); } System.out.println("normal termination"); } private static void foo() { System.out.println("foo"); foo(); } private static void bar() { System.out.println("bar"); } } 怎么会这样?我认为,当引发StackOverflowError时,堆栈应该已满,以至于没有空间可以调用另一个函数。错误处理块是在其他堆栈中运行还是在这里发生了什么?


15
gson.toJson()抛出StackOverflowError
我想从我的对象生成一个JSON字符串: Gson gson = new Gson(); String json = gson.toJson(item); 每当我尝试执行此操作时,都会出现此错误: 14:46:40,236 ERROR [[BomItemToJSON]] Servlet.service() for servlet BomItemToJSON threw exception java.lang.StackOverflowError at com.google.gson.stream.JsonWriter.string(JsonWriter.java:473) at com.google.gson.stream.JsonWriter.writeDeferredName(JsonWriter.java:347) at com.google.gson.stream.JsonWriter.value(JsonWriter.java:440) at com.google.gson.internal.bind.TypeAdapters$7.write(TypeAdapters.java:235) at com.google.gson.internal.bind.TypeAdapters$7.write(TypeAdapters.java:220) at com.google.gson.internal.bind.TypeAdapterRuntimeTypeWrapper.write(TypeAdapterRuntimeTypeWrapper.java:68) at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$1.write(ReflectiveTypeAdapterFactory.java:89) at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.write(ReflectiveTypeAdapterFactory.java:200) at com.google.gson.internal.bind.TypeAdapterRuntimeTypeWrapper.write(TypeAdapterRuntimeTypeWrapper.java:68) at com.google.gson.internal.bind.CollectionTypeAdapterFactory$Adapter.write(CollectionTypeAdapterFactory.java:96) at com.google.gson.internal.bind.CollectionTypeAdapterFactory$Adapter.write(CollectionTypeAdapterFactory.java:60) at com.google.gson.Gson$FutureTypeAdapter.write(Gson.java:843) 这些是我的BomItem类的属性: private int itemId; private …


10
Node.js-超出最大调用堆栈大小
当我运行代码时,Node.js会"RangeError: Maximum call stack size exceeded"引发由过多的递归调用引起的异常。我尝试将Node.js堆栈大小增加sudo node --stack-size=16000 app,但Node.js崩溃而没有任何错误消息。当我不使用sudo再次运行此命令时,Node.js将显示'Segmentation fault: 11'。是否有可能在不删除递归调用的情况下解决此问题?

3
为什么此语句不引发StackOverflowError?
我刚刚在另一个问题中看到了这段奇怪的代码。我以为会导致StackOverflowError被抛出,但事实并非如此…… public class Node { private Object one; private Object two; public static Node NIL = new Node(Node.NIL, Node.NIL); public Node(Object one, Object two) { this.one = one; this.two = two; } } 我以为它会爆炸,因为要进行Node.NIL引用本身。 我不知道为什么不这样做。

2
为什么递归调用会导致StackOverflow处于不同的堆栈深度?
我试图弄清楚C#编译器如何处理尾部调用。 (答案:不是。但是64位JIT将执行TCE(尾部调用消除)。有限制条件。) 因此,我使用递归调用编写了一个小型测试,该测试打印了在StackOverflowException终止进程之前被调用多少次。 class Program { static void Main(string[] args) { Rec(); } static int sz = 0; static Random r = new Random(); static void Rec() { sz++; //uncomment for faster, more imprecise runs //if (sz % 100 == 0) { //some code to keep this method from being …

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.