小编Kev*_*ung的帖子

使用随机数时间歇性堆栈溢出异常

public int S1x;

public void Execute()
{
    Random random = new Random();
    S1x = random.Next(14, 146);
    if (S1x % 15 != 0)
        Fix(S1x);
}

public int Fix(int SX)
{                
    Random randomG = new Random();
    SX = randomG.Next(14, 146);
    if (SX % 15 != 0)                               
        Fix(SX); // This is the recursion

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

每次运行它都会正常工作,但之后我会尝试再次编译并运行它会给我这个错误:

System.StackOverflowException未处理mscorlib.dll中发生未处理的类型"System.StackOverflowException"异常{无法计算表达式,因为当前线程处于堆栈溢出状态.}

并且,是的,我知道有一种更简单的方法可以做到这一点,但是我的方法是将值设置为等于14到146之间的随机数,同时还要确保它是15的倍数,但仍然可以工作.

我真的很困惑为什么它有时只给我错误信息.

那有什么不对呢?为什么它被标记为无限递归,即使它没有任何无限的东西?

c# stack-overflow random recursion

1
推荐指数
1
解决办法
1806
查看次数

标签 统计

c# ×1

random ×1

recursion ×1

stack-overflow ×1