Класс StackOverflowError
Класс StackOverflowError представляет собой ошибку,
которая возникает, когда стек вызовов программы переполняется.
Это обычно происходит при бесконечной рекурсии или
слишком глубокой вложенности вызовов функций. Данный класс
наследуется от класса Error и не имеет собственных
параметров или методов, кроме унаследованных. При переполнении
стека виртуальная машина Dart выбрасывает экземпляр
StackOverflowError, который можно перехватить
с помощью конструкций обработки ошибок.
Синтаксис
StackOverflowError()
Класс не имеет публичных конструкторов для прямого создания экземпляров в пользовательском коде. Объекты этого класса создаются средой выполнения Dart автоматически при возникновении соответствующей ошибки.
Пример
Давайте рассмотрим пример, в котором возникает переполнение
стека из-за бесконечной рекурсии. Функция recursive
вызывает саму себя без условия выхода:
void recursive()
{
recursive();
}
void main()
{
try
{
recursive();
}
on StackOverflowError catch (e)
{
print('Caught: $e');
}
}
Результат выполнения кода:
"Caught: Stack Overflow"
Пример
Давайте рассмотрим пример с глубокой, но конечной рекурсией, которая также может привести к переполнению стека при достаточно большом значении параметра:
int sum(int n)
{
if (n == 0)
{
return 0;
}
return n + sum(n - 1);
}
void main()
{
try
{
print(sum(1000000));
}
on StackOverflowError catch (e)
{
print('Stack overflow occurred');
}
}
Результат выполнения кода:
"Stack overflow occurred"