Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/301.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 为什么在函数执行之前会出现stackoverflow异常?_C#_Stack Overflow - Fatal编程技术网

C# 为什么在函数执行之前会出现stackoverflow异常?

C# 为什么在函数执行之前会出现stackoverflow异常?,c#,stack-overflow,C#,Stack Overflow,我编写了覆盖对象的等号的代码。 在我写了它之后,我意识到我将使用StackOverFlowException,因为我还没有实现IEquatable接口来处理最后一行代码。然而,我运行代码来查看发生了什么,一些奇怪的事情发生了,您可以在下图中看到: 断点此时甚至不可命中,似乎代码在我的程序运行之前就已经被使用了。这是CLR所做的事情吗?是别的吗 谢谢你的帮助 骆驼背上的最后一根稻草(骆驼背上的最后一根稻草)累坏了 堆栈可能没有其他4(8)个字节来存储右侧的。 实际原因似乎是 return E

我编写了覆盖对象的等号的代码。 在我写了它之后,我意识到我将使用StackOverFlowException,因为我还没有实现IEquatable接口来处理最后一行代码。然而,我运行代码来查看发生了什么,一些奇怪的事情发生了,您可以在下图中看到:

断点此时甚至不可命中,似乎代码在我的程序运行之前就已经被使用了。这是CLR所做的事情吗?是别的吗

谢谢你的帮助

骆驼背上的最后一根稻草(骆驼背上的最后一根稻草)累坏了

堆栈可能没有其他4(8)个字节来存储
右侧的
。
实际原因似乎是

  return Equals(right as Quality)

如果
右侧
质量
类型,则该代码注定会一次又一次地调用
等于

您的制动点将永远不会被击中。它的内部是白色的(不是红色的,上面有警告),因此代码与正在运行的probram不匹配。重建您的解决方案。您是否实现了
IEquatable
接口?看看这个接口可能会有帮助@Dovydas Sopa-这不是问题,它是在生成之后。@Alessandro D'Andria-是的,您是对的,修复了它。如果我知道递归部分在哪里,它可以通过该行旁边的标记来显示。这不是我的问题。问题是为什么没有找到断点。我希望,即使它是一个无休止的递归函数,我也会在第一次调用Equals时命中断点。@Moti Berger:堆栈正在消耗,在某个时候,它最终耗尽了:堆栈无法再分配4/8字节。最后的打击可能发生在某个随机/奇怪的点上。我知道在无限递归调用中,堆栈最终会耗尽,但要耗尽堆栈,函数的代码必须至少运行一次,所以为什么没有命中断点。某些不是我的代码的东西,在我的代码运行之前,一定使用了Quality类型的Equals函数!我的问题是谁使用了这个函数。程序在启动前就崩溃了!
  return Equals(right as Quality)