今天有一个朋友告诉我他的程序发生了StackOverFlowException

可是查来查去不知道为什么,就一段递归代码几个人阅读过似乎都没有问题

以下是简化版的代码 (真实的代码复杂很多,不过大意如下)

        static void Test(int i)
{
if (i > 20000)//或者其他退出条件
{
return;
}
Test(i + 1);
}

static void Main()
{
Test(0);
}


呵呵,大家能看出有什么问题么? 提示:逻辑上没有任何问题,也别在找什么语法错误

看起来逻辑是:这段代码没有死循环,20000次就退出嘛,

可是在实际运行中会抛出StackOverFlowException异常,

其原因是由于递CLR中默认堆栈大小是1M,

此程序不断的递归,每一级递归的方法都被压入了堆栈,当堆栈大小达到1M的时候,StackOverFlowException就抛出了

在我的机器上i运行到15918的时候抛出了堆栈溢出

大家可能觉得 要递归10000多次呢,看起来应该不会有什么问题吧

其实只要不小心,小几百次的递归就会出异常。

稍后演示这种情况。。。

相关文章:

  • 2021-12-16
  • 2022-01-07
  • 2021-09-25
  • 2021-06-03
  • 2021-12-26
猜你喜欢
  • 2021-11-24
  • 2021-05-19
  • 2022-12-23
  • 2021-08-02
  • 2022-12-23
  • 2021-08-10
  • 2022-02-17
相关资源
相似解决方案