gpt4 book ai didi

c# - 如何避免堆栈溢出?

转载 作者:太空狗 更新时间:2023-10-29 22:07:03 26 4
gpt4 key购买 nike

我使用 CSharpCodeProvider 编译我的代码,并在结果程序集中动态创建某个类的实例。比我调用一些方法。如果该方法具有递归,我将收到 StackOverflowException 并且我的应用程序终止。

如何避免这种情况?

using System;
using System.Runtime.Remoting;
namespace TestStackOverflow
{
class Program
{
class StackOver : MarshalByRefObject
{
public void Run()
{
Run();
}
}

static void Main(string[] args)
{
AppDomain domain = AppDomain.CreateDomain("new");

ObjectHandle handle = domain.CreateInstance(typeof (StackOver).Assembly.FullName, typeof (StackOver).FullName);
if (handle != null)
{
StackOver stack = (StackOver) handle.Unwrap();
stack.Run();
}

}
}
}

相关:

What is a stack overflow?

最佳答案

StackOverflow 表示您的递归太深,堆栈内存不足。例如:

public class StackOver
{
public void Run()
{
Run();
}
}

这将导致堆栈溢出,因为 StackOver::Run() 将被反复调用,直到没有剩余内存。

我怀疑在你的情况下,你可能缺少终止条件或者你运行了太多的递归迭代。

如果您试图让应用程序保持运行,请尝试:

namespace TestStackOverflow
{
class Program
{
class StackOver : MarshalByRefObject
{
public bool Run()
{
return true; // Keep the application running. (Return false to quit)
}
}

static void Main(string[] args)
{
// Other code...

while (stack.Run());
}

}
}

关于c# - 如何避免堆栈溢出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1453812/

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