Este artículo se tradujo automáticamente. Para ver el artículo en inglés, active la casilla Inglés. Además, puede mostrar el texto en inglés en una ventana emergente si mueve el puntero del mouse sobre el texto.
Traducción
Inglés

Clase StackOverflowException

 

Publicado: noviembre de 2016

Excepción que se produce cuando la pila de ejecución se desborda debido a que contiene demasiadas llamadas a métodos anidadas. Esta clase no puede heredarse.

Espacio de nombres:   System
Ensamblado:  mscorlib (en mscorlib.dll)

System.Object
  System.Exception
    System.SystemException
      System.StackOverflowException

[SerializableAttribute]
[ComVisibleAttribute(true)]
public sealed class StackOverflowException : SystemException

NombreDescripción
System_CAPS_pubmethodStackOverflowException()

Inicializa una nueva instancia de la clase StackOverflowException, estableciendo la propiedad Message de una nueva instancia en un mensaje proporcionado por el sistema que describe el error, como "La operación solicitada provocó un desbordamiento de la pila". Este mensaje tiene en cuenta la referencia cultural del sistema actual.

System_CAPS_pubmethodStackOverflowException(String)

Inicializa una nueva instancia de la clase StackOverflowException con el mensaje de error especificado.

System_CAPS_pubmethodStackOverflowException(String, Exception)

Inicializa una nueva instancia de la clase StackOverflowException con el mensaje de error especificado y una referencia a la excepción interna que representa la causa de esta excepción.

NombreDescripción
System_CAPS_pubpropertyData

Obtiene una colección de pares clave-valor que proporcionan más información definida por el usuario sobre la excepción.(Heredado de Exception).

System_CAPS_pubpropertyHelpLink

Obtiene o establece un vínculo al archivo de ayuda asociado a esta excepción.(Heredado de Exception).

System_CAPS_pubpropertyHResult

Obtiene o establece HRESULT, un valor numérico codificado que se asigna a una excepción específica.(Heredado de Exception).

System_CAPS_pubpropertyInnerException

Obtiene la instancia Exception que produjo la excepción actual.(Heredado de Exception).

System_CAPS_pubpropertyMessage

Obtiene un mensaje que describe la excepción actual.(Heredado de Exception).

System_CAPS_pubpropertySource

Devuelve o establece el nombre de la aplicación o del objeto que generó el error.(Heredado de Exception).

System_CAPS_pubpropertyStackTrace

Obtiene una representación de cadena de los marcos inmediatos en la pila de llamadas.(Heredado de Exception).

System_CAPS_pubpropertyTargetSite

Obtiene el método que produjo la excepción actual.(Heredado de Exception).

NombreDescripción
System_CAPS_pubmethodEquals(Object)

Determina si el objeto especificado es igual al objeto actual.(Heredado de Object).

System_CAPS_pubmethodGetBaseException()

Cuando se invalida en una clase derivada, devuelve la clase Exception que representa la causa principal de una o más excepciones posteriores.(Heredado de Exception).

System_CAPS_pubmethodGetHashCode()

Sirve como la función hash predeterminada.(Heredado de Object).

System_CAPS_pubmethodGetObjectData(SerializationInfo, StreamingContext)

Cuando se invalida en una clase derivada, establece SerializationInfo con información sobre la excepción.(Heredado de Exception).

System_CAPS_pubmethodGetType()

Obtiene el tipo en tiempo de ejecución de la instancia actual.(Heredado de Exception).

System_CAPS_pubmethodToString()

Crea y devuelve una representación de cadena de la excepción actual.(Heredado de Exception).

StackOverflowException se produce para los errores de desbordamiento de pila de ejecución, normalmente en caso de recursividad muy profunda o ilimitada.

StackOverflowException utiliza HRESULT COR_E_STACKOVERFLOW, que tiene el valor 0x800703E9. El Localloc produce la instrucción del lenguaje intermedio (IL) StackOverflowException. Para obtener una lista de valores de propiedad iniciales para una StackOverflowException de objeto, vea el StackOverflowException constructores.

En .NET Framework 1.0 y 1.1, podría detectar un StackOverflowException objeto (por ejemplo, para recuperarse de una recursividad ilimitada). A partir de .NET Framework 2.0, no se puede detectar un StackOverflowException de objeto con un try/catch bloque y el proceso correspondiente se finaliza de forma predeterminada. Por consiguiente, debe escribir el código para detectar y evitar un desbordamiento de pila. Por ejemplo, si su aplicación depende de la recursividad, utilice un contador o una condición de estado para terminar el bucle recursivo. En el ejemplo siguiente se utiliza un contador para asegurarse de que el número de recursiva se llama a la Execute método no supere el máximo definido por la constante MAX_RECURSIVE_CALLS.

using System;

public class Example
{
   private const int MAX_RECURSIVE_CALLS = 1000;
   static int ctr = 0;

   public static void Main()
   {
      Example ex = new Example();
      ex.Execute();
      Console.WriteLine("\nThe call counter: {0}", ctr);
   }

   private void Execute()
   {
      ctr++;
      if (ctr % 50 == 0)
         Console.WriteLine("Call number {0} to the Execute method", ctr);

      if (ctr <= MAX_RECURSIVE_CALLS)
         Execute();

      ctr--;
   }
}
// The example displays the following output:
//       Call number 50 to the Execute method
//       Call number 100 to the Execute method
//       Call number 150 to the Execute method
//       Call number 200 to the Execute method
//       Call number 250 to the Execute method
//       Call number 300 to the Execute method
//       Call number 350 to the Execute method
//       Call number 400 to the Execute method
//       Call number 450 to the Execute method
//       Call number 500 to the Execute method
//       Call number 550 to the Execute method
//       Call number 600 to the Execute method
//       Call number 650 to the Execute method
//       Call number 700 to the Execute method
//       Call number 750 to the Execute method
//       Call number 800 to the Execute method
//       Call number 850 to the Execute method
//       Call number 900 to the Execute method
//       Call number 950 to the Execute method
//       Call number 1000 to the Execute method
//
//       The call counter: 0
System_CAPS_noteNota

Aplicar el HandleProcessCorruptedStateExceptionsAttribute atribuir a un método que produce una StackOverflowException no tiene ningún efecto. Todavía no se puede controlar la excepción del código de usuario.

Si la aplicación hospeda common language runtime (CLR), puede especificar que CLR debe descargarse el dominio de aplicación cuando se produce una excepción de desbordamiento de pila y el proceso correspondiente pueda continuar. Para obtener más información, consulta ICLRPolicyManager (Interfaz).

.NET Framework
Disponible desde 1.1
Silverlight
Disponible desde 2.0
Windows Phone Silverlight
Disponible desde 7.0

Cualquier miembro ( Compartido en Visual Basic) estático público de este tipo es seguro para subprocesos. No se garantiza que los miembros de instancia sean seguros para subprocesos.

Volver al principio
Mostrar: