gpt4 book ai didi

c# - 大列表的 StackOverflowException

转载 作者:太空宇宙 更新时间:2023-11-03 20:45:34 26 4
gpt4 key购买 nike

我想做一个非常简单的任务,它以某种方式使程序崩溃。

我有一个包含数字的列表,所有数字都是唯一的。超过一定数量,我想倒序。

示例:5, 16, 11, 3, 8, 4 -> 5, 16, 11, 4, 8, 3 当使用 3 作为轴心点时.

以下是我尝试过的众多方法之一。

private List<int> ShiftPath(List<int> oldPath, int shift)
{
List <int> newPath = new List<int>();
int counter = 0;
// Start reordering
// Forwards
while (oldPath[counter] != shift)
{
newPath.Add(oldPath[counter]);
counter++;
}
// Backwards
counter = oldPath.Count - 1;
while (oldPath[counter] != shift)
{
newPath.Add(oldPath[counter]);
counter--;
}
// New endpoint
newPath.Add(shift);

// Update

return newPath;
}

现在可以了。它可能不是最佳解决方案,但它确实有效。我已经使用这种方法很长一段时间了,但现在我已经到了列表中的项目数量变得非常大(超过 6,000)的地步。最终,我在尝试向 newPath 添加内容时收到 StackOverFlowException。

我 100% 确定没有 VS 声称的无限循环。我尝试了其他方法,例如直接获取项目范围,for 和 foreach 循环而不是 while,最终都崩溃了。看来数据量太大了。而且它只会变得更大(高达 20,000)。

证明(?):即使这样也会使程序抛出异常:List newPath = new List (oldPath);

关于导致此问题的原因/如何解决它的任何想法?

-来自初学者。

最佳答案

堆栈溢出一定不能出现在您向我们展示的代码中,因为那里没有递归。寻找你的代码在哪里递归。更好的是,当您获得 StackOverflowException 时获得的堆栈跟踪是什么?这将告诉您代码在递归的哪个位置进入无限递归循环。

普通的旧无限循环不会导致 StackOverflowException。要做到这一点,您需要有一个不会结束的递归,直到您的堆栈耗尽。

关于c# - 大列表的 StackOverflowException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1010535/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com