如何在不使用递归的情况下故意触发StackOverflowException?

时间:2011-10-10 08:25:50

标签: c# .net recursion stack-overflow

有人告诉我,每个方法的堆栈大小都是1mb。 所以我假设在一个方法中初始化256个整数值将导致StackOverflowException。我在代码中尝试过,但没有抛出任何异常。

那么,如何在不使用递归的情况下故意触发StackOverflowException?

4 个答案:

答案 0 :(得分:19)

使用

throw new StackOverflowException ();

答案 1 :(得分:7)

stackalloc可能是最简单的方法(假设你希望运行时抛出错误,而不是你自己):

    unsafe void Boom()
    {
        int* data = stackalloc int[512 * 1024]; // 2MB
    }

答案 2 :(得分:5)

我将添加另一种方法: - )

unsafe struct FixedBufferExample
{
    public fixed byte Buffer[128 * 1024]; // This is a fixed buffer.
}

现在这个结构是128kb :-)如果你声明一个类型为FixedBufferExample的局部变量(不使用yield或async的方法),它应该使用128kb的堆栈。你可以很快用完你的筹码。

答案 3 :(得分:-2)

在您的财产内部调用您的财产(这是递归,但它是如此常见,我不得不提及它):

int MyProperty
{
   set { MyProperty = value; }
}