Cui Pengfei 崔鹏飞
Cui Pengfei 崔鹏飞

Reputation: 8305

how to deliberately trigger a StackOverflowException without using recursion?

I was told that every method has a stack the size of 1mb. So I assumed that initializing 256 integer values in one method will cause a StackOverflowException. I tried that in code, but no exception was thrown.

So, how to deliberately trigger a StackOverflowException without using recursion?

Upvotes: 9

Views: 921

Answers (3)

xanatos
xanatos

Reputation: 111820

I'll add another method :-)

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

Now this structure is 128kb :-) If you declare a local variable (of a method that doesn't use yield or async) of type FixedBufferExample it should use 128kb of stack. You can use up your stack quite quickly.

Upvotes: 6

Marc Gravell
Marc Gravell

Reputation: 1062512

stackalloc is probably the easiest way (assuming you want the runtime to throw the error, rather than yourself):

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

Upvotes: 8

Yahia
Yahia

Reputation: 70369

use

throw new StackOverflowException ();

Upvotes: 18

Related Questions