由于递归的任何其他原因,堆栈溢出是否会发生?

Jor*_*oba 4 c# stack-overflow exception

我得到一个代码片段的堆栈溢出异常似乎无法产生stackoverflow ...它看起来像这样:

public String WriteToFile(XmlDocument pDoc, String pPath)
{
  string source = "";
  string seq = "";
  string sourcenet = "";

  XmlNodelist sourceNode = pDoc.GetElementsByTagName(XmlUtils.Nodes.Source);
  source = sourceNode.Item(0).InnerText;

  XmlNodelist sqList= pDoc.GetElementsByTagName(XmlUtils.Nodes.Seq);
  seq = sqList.Item(0).InnerText;

  XmlNodelist sourceNets = pDoc.GetElementsByTagName(XmlUtils.Nodes.SourceNets);
  sourcenet = sourceNets.Item(0).InnerText;

  string fileName = Folders.GetMyFileName(source, seq, sourcenet);
  string fullPath = Path.Combine(pPath, fileName);

  pDoc.Save(pFullPathFile);  <--- Stackoverflow is raised here

  return pFullPathFile; 
}
Run Code Online (Sandbox Code Playgroud)

没有递归调用,如果在转到"外部代码"之前检查调用堆栈的深度为2(我猜测它不是外部的,而是启动线程的框架的一部分,调试关闭).

¿无论如何,除了递归调用之外还有什么异常可以上升吗?它总是在pDoc.Save方法调用中失败...并且pDoc实际上并不那么大......更像是32KB的数据......

Jar*_*Par 7

堆栈超出其最大大小时,可能会发生堆栈溢出异常.这主要是通过......

  • 有一个深度嵌套的堆栈,不是递归的.想想事件风暴,其中事件A导致事件B导致事件C,所有事件都具有深度增长堆栈的处理程序.
  • 在一些大的堆栈分配之后发生浅堆栈