Updated June 30, 2023
Introduction to C# StackOverflowException
The following article provides an outline for C# StackOverflowException. The StackOverflowException is thrown by the Microsoft Intermediate Language (MSIL) instruction called OpCodes.LocalLoc instruction. The StackOverflowException class provides several methods, including StackOverflowException(), StackOverflowException(string message), StackOverflowException(string message, exception innerexception), and so on.
Syntax :
[Serializable]
public sealed class StackOverflowException : SystemException
Working
- The program encounters a StackOverflowException when there is a situation where multiple methods are called in a nested manner, resulting in uncontrolled recursion that generates an infinite stack in memory. This ultimately leads to the termination of the program without displaying an error message.
- It occurs when the program exhausts the available stack space due to excessive method calls and cannot allocate additional stack memory.
- There are several methods of StackOverflowException class like StackOverflowException(), StackOverflowException(string message), StackOverflowException(string message, exception innerexception), etc.
Examples of C# StackOverflowException
Given below are the examples mentioned :
Example #1
C# program to demonstrate Stack Overflow Exception when there is an infinite recursion happening at the run time.
Code:
using System;
//a class called program is defined
public class program
{
// a method called rec is defined which takes a value as parameter and increases its value by one
static void Rec(int vals)
{
// since we have written a recursive loop and 0 is passed as a parameter, it ends in an infinite loop causing exception
Console.WriteLine(vals);
Rec(++vals);
}
//main method is called
public static void Main()
{
//The rec method is called to start the infinite recursion
Rec(0);
}
}
Output:
Example #2
C# program to demonstrate StackOverflowException when there is an infinite recursion happening at the run time even after using try block and catch blocks of code to catch the exception.
Code:
using System;
//a class called check is defined
public class check
{
// a method called ex is defined which takes a value as parameter and increases its value by one
static void ex(int equals)
{
Console.WriteLine(equals);
ex(++equals);
}
//main method is called within which try and block methods are defined to catch the exception
public static void Main()
{
try
{
//The ex method is called by passing zero as a parameter to start the infinite recursion
ex(0);
}
catch (StackOverflowException ep)
{
Console.WriteLine(ep.Message);
}
}
}
Output:
An infinite loop for recursion begins by passing zero as a parameter to the ex method within the try block. Even though we have written the catch block to catch the exception, it fails to catch this exception because this exception goes beyond the catch block to be caught.
Steps to Avoid StackOverflowException in C#
- Stack overflow happens when the stack in the memory is full, and this problem can be overcome by setting the depth of the stack, and the debugger can provide this information.
- Now that we have an opportunity to set the value of the depth of the stack, we have to set it to a value as small as possible and observe the output. If the output is not overflowing, we can change it to a bigger value, and in case the stack overflow happens, we will be able to decode what is the right value to be set for the depth of the stack. Hence to create the exceptions that can catch the StackOverflowException, knowing the depth of the stack with the help of a debugger is a must.
- The code which causes recursion is the cause of StackOverflowException.
Recommended Articles
This is a guide to C# StackOverflowException. Here we discuss the introduction, working, examples, and steps to avoid StackOverflowException. You may also have a look at the following articles to learn more –