小编jal*_*e13的帖子

C# 如何检测堆栈溢出?

我正在编写代码来解决问题,并且它适用于较小的输入,但是当增加到较大的输入时,我遇到了堆栈溢出异常:

Stack overflow.
Repeat 3239 times:
--------------------------------
   at Program+<>c__DisplayClass0_0.<<Main>$>g__Traverse|3(Point, Direction)
--------------------------------
   at Program.<<Main>$>g__Do|0_0()
Run Code Online (Sandbox Code Playgroud)

我还注意到,它声称重复的次数因执行而异,有时我也会得到 ~2300 次重复或 ~2800 次重复。

经过一段时间的调试后,我没有发现代码有任何问题,因此我手动将线程的堆栈大小设置为Int32.MaxValue,代码工作并产生了正确的答案。

我很好奇是否有人知道 C# 如何检测堆栈溢出?在这种情况下,在我看来,C# 过早地预测了堆栈溢出,即使程序确实有机会终止。

此外,为什么 C# 会给出堆栈溢出错误,指出调用已重复x多次,而x每次执行似乎都不同?

任何见解或信息表示赞赏!

c# stack-overflow recursion

0
推荐指数
1
解决办法
120
查看次数

标签 统计

c# ×1

recursion ×1

stack-overflow ×1