StackOverflowException
Класс StackOverflowException появляется
при слишком глубокой рекурсии без выхода.
Начиная с .NET 2.0 переполнение стека из-за
бездонной рекурсии catch (StackOverflowException)
не перехватывает - процесс завершается.
В примерах только конечная рекурсия, которая
печатает "ok", без падения программы.
Синтаксис
static void Step(int depth) { if (depth >= 3) return; Step(depth + 1); }
Пример
Давайте вызвать рекурсию глубины
using System;
class Program
{
static void Main()
{
Step(0);
}
static void Step(int depth)
{
if (depth >= 3)
{
Console.WriteLine("ok");
return;
}
Step(depth + 1);
}
}
Результат выполнения кода:
"ok"
Пример
Давайте посчитать шаги конечной рекурсии:
using System;
class Program
{
static void Main()
{
int res = CountDown(3);
Console.WriteLine(res);
}
static int CountDown(int depth)
{
if (depth <= 0)
{
return 0;
}
return 1 + CountDown(depth - 1);
}
}
Результат выполнения кода:
3
Пример
Давайте вывести имя типа StackOverflowException:
using System;
class Program
{
static void Main()
{
Console.WriteLine(typeof(StackOverflowException).Name);
}
}
Результат выполнения кода:
"StackOverflowException"
Смотрите также
-
исключение
OutOfMemoryException,
которое тоже относится к ресурсам CLR -
класс
Exception,
от которого наследует StackOverflowException -
исключение
IOException,
которое перехватывают в прикладном коде -
исключение
FileNotFoundException,
которое ловят при работе с файлами