![](/img/trans.png)
[英]I'm making ASP .NET MVC application, I'm getting this error when running the project
[英]I'm making a Console Application Game (C#), and I'm running into Stack Overflow Error. How to avoid?
我的游戏对游戏的每个状态都有多种方法,这些方法在适用的情况下相互调用。 这会在一段时间后导致堆栈溢出错误。 有什么办法可以避免这种情况,也许是一种解决方法?
编辑:由于下面的用户建议我的代码基本上是:
void a()
{
b();
}
void b()
{
a();
}
在这段代码中,我打算使用递归来改变游戏状态。 有没有办法重置堆栈,这样它就不会导致溢出错误,然后返回到方法。
可能的修复:(这只是延迟了堆栈溢出还是已经摆脱了它?)
int tracker;
void start()
{
a();
resetter();
}
void a()
{
b();
}
void b()
{
if (tracker > 10)
{
tracker = 0;
return;
}
else
tracker++;
a();
}
void resetter()
{
start();
}
我假设你正在做这样的事情:
void A()
{
B();
}
void B()
{
A();
}
根据定义,这将始终导致堆栈溢出。 这主要是因为堆栈的工作方式。 假设您先调用A
,在此方法调用B
的那一刻,此方法的参数/变量/... 被放入堆栈中。 然后,此方法 ( B
) 调用“A”; 发生这种情况的那一刻,它将把它的参数放在堆栈上。
方法返回后,堆栈上的数据被清除。 但这两种方法永远不会返回......它们不断地相互调用,例如:
A()
--> B()
--> A()
--> B()
--> A()
--> B()
--> A()
--> B()
--> A()
如您所见,越来越多的东西被放入堆栈,导致您的溢出。
你会希望你的递归停止来解决这个问题。 您可以通过在任一方法中引入停止条件来实现此目的,该条件将return
。
如果您希望更具体地回答您的问题,请添加一些代码。 但是既然你说的是A调用B,也就是调用A,那么上面的伪代码就足够了。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.