样例代码:
Static void main(string[] args) { Class1 c1 = new Class1(); }
Class1 { Class1() { Class2 c2 = new Class2(); } }
Class2 { Class2() { Class1 c1 = new Class1(); } }
上面的代码抛出
StackOverFlowException
。在这里,我们递归创建Class1
和Class2
对象。对象存储在堆中,那么为什么它不抛出与堆相关的HeapOversizedException
或someotherException
? 最佳答案
无限递归总是导致StackOverflowException
。这不是因为对象分配,而是因为对方法的调用必须记住调用者在堆栈上的地址,并且这样做最终会导致堆栈溢出。
Wikipedia对该过程进行了非常正式的描述。
关于c# - 为什么调用StackOverflowException?为什么不HeapOverSizedException?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19314933/