样例代码:

Static void main(string[] args) { Class1 c1 = new Class1(); }

Class1 { Class1() { Class2 c2 = new Class2(); } }

Class2 { Class2() { Class1 c1 = new Class1(); } }


上面的代码抛出StackOverFlowException。在这里,我们递归创建Class1Class2对象。对象存储在堆中,那么为什么它不抛出与堆相关的HeapOversizedExceptionsomeotherException

最佳答案

无限递归总是导致StackOverflowException。这不是因为对象分配,而是因为对方法的调用必须记住调用者在堆栈上的地址,并且这样做最终会导致堆栈溢出。

Wikipedia对该过程进行了非常正式的描述。

关于c# - 为什么调用StackOverflowException?为什么不HeapOverSizedException?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19314933/

10-16 22:51