A StackOverflowError
- ошибка времени выполнения в java.
Он вызывается, когда количество памяти стека вызовов распределено JVM.
Обычный случай, когда a StackOverflowError
выбрасывается, когда стек вызовов превышает из-за чрезмерной глубокой или бесконечной рекурсии.
Пример:
public class Factorial {
public static int factorial(int n){
if(n == 1){
return 1;
}
else{
return n * factorial(n-1);
}
}
public static void main(String[] args){
System.out.println("Main method started");
int result = Factorial.factorial(-1);
System.out.println("Factorial ==>"+result);
System.out.println("Main method ended");
}
}
Трассировка стека:
Main method started
Exception in thread "main" java.lang.StackOverflowError
at com.program.stackoverflow.Factorial.factorial(Factorial.java:9)
at com.program.stackoverflow.Factorial.factorial(Factorial.java:9)
at com.program.stackoverflow.Factorial.factorial(Factorial.java:9)
В приведенном выше случае можно избежать программных изменений. Но если логика программы правильная, и все же это происходит, тогда размер стека должен быть увеличен.
Я не могу легко проверить это (нет компилятора / vs под рукой), но вы можете попытаться добавить ошибку модели явным образом, прежде чем снова отобразить представление
if (result.Succeeded)
{
return RedirectToAction("Index", "Home");
}
else
{
var error = string.Join( ", ", result.Errors );
this.ModelState.AddModelError( "Password", error );
}
string.Join
описания, как и я. – Wiktor Zychla 14 July 2018 в 08:33