Создаем портфолио за 1 месяц
К концу месяца: 4 классных проекта в вашем портфолио! Стоимость: 100$. Подробности...
968 of 1492 menu
◀ ▶

StackOverflowException

Класс StackOverflowException появляется при слишком глубокой рекурсии без выхода. Начиная с .NET 2.0 переполнение стека из-за бездонной рекурсии catch (StackOverflowException) не перехватывает - процесс завершается. В примерах только конечная рекурсия, которая печатает "ok", без падения программы.

Синтаксис

static void Step(int depth) { if (depth >= 3) return; Step(depth + 1); }

Пример

Давайте вызвать рекурсию глубины 3:

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,
    которое ловят при работе с файлами
← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить