Heim  >  Artikel  >  Backend-Entwicklung  >  C# StackOverflowException

C# StackOverflowException

王林
王林Original
2024-09-03 15:21:20771Durchsuche

Der folgende Artikel enthält eine Übersicht über C# StackOverflowException. Die StackOverflowException wird von der Microsoft Intermediate Language (MSIL)-Anweisung namens OpCodes.LocalLoc-Anweisung ausgelöst. Die StackOverflowException-Klasse stellt mehrere Methoden bereit, darunter StackOverflowException(), StackOverflowException(string message), StackOverflowException(string message, Exception innereException) und so weiter.

Syntax:

[Serializable]
public sealed class StackOverflowException : SystemException

Arbeiten

  • Das Programm stößt auf eine StackOverflowException, wenn mehrere Methoden verschachtelt aufgerufen werden, was zu einer unkontrollierten Rekursion führt, die einen unendlichen Stapel im Speicher erzeugt. Dies führt letztendlich zum Abbruch des Programms, ohne dass eine Fehlermeldung angezeigt wird.
  • Es tritt auf, wenn das Programm aufgrund übermäßiger Methodenaufrufe den verfügbaren Stapelspeicher erschöpft und keinen zusätzlichen Stapelspeicher zuweisen kann.
  • Es gibt verschiedene Methoden der StackOverflowException-Klasse wie StackOverflowException(), StackOverflowException(String-Nachricht), StackOverflowException(String-Nachricht, Ausnahme innereException) usw.

Beispiele für C# StackOverflowException

Im Folgenden finden Sie die genannten Beispiele:

Beispiel #1

C#-Programm zur Demonstration einer Stapelüberlaufausnahme, wenn zur Laufzeit eine unendliche Rekursion stattfindet.

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);
}
}

Ausgabe:

C# StackOverflowException

Beispiel #2

C#-Programm zur Demonstration von StackOverflowException, wenn zur Laufzeit eine unendliche Rekursion stattfindet, auch nachdem Try-Block- und Catch-Codeblöcke zum Abfangen der Ausnahme verwendet wurden.

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);
}
}
}

Ausgabe:

C# StackOverflowException

Eine Endlosschleife für die Rekursion beginnt mit der Übergabe von Null als Parameter an die ex-Methode im try-Block. Obwohl wir den Catch-Block zum Abfangen der Ausnahme geschrieben haben, kann er diese Ausnahme nicht abfangen, da diese Ausnahme über den abzufangenden Catch-Block hinausgeht.

Schritte zur Vermeidung von StackOverflowException in C#

  • Ein Stapelüberlauf tritt auf, wenn der Stapel im Speicher voll ist. Dieses Problem kann gelöst werden, indem die Tiefe des Stapels festgelegt wird und der Debugger diese Informationen bereitstellen kann.
  • Da wir nun die Möglichkeit haben, den Wert der Tiefe des Stapels festzulegen, müssen wir ihn auf einen möglichst kleinen Wert einstellen und die Ausgabe beobachten. Wenn die Ausgabe nicht überläuft, können wir sie auf einen größeren Wert ändern, und falls es zu einem Stapelüberlauf kommt, können wir den richtigen Wert dekodieren, der für die Tiefe des Stapels festgelegt werden muss. Um die Ausnahmen zu erstellen, die die StackOverflowException abfangen können, ist es daher ein Muss, die Tiefe des Stapels mithilfe eines Debuggers zu kennen.
  • Der Code, der eine Rekursion verursacht, ist die Ursache von StackOverflowException.

Das obige ist der detaillierte Inhalt vonC# StackOverflowException. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Vorheriger Artikel:C# OutOfMemoryExceptionNächster Artikel:C# OutOfMemoryException