¿Un desbordamiento de pila es un tipo de error de programación que se produce cuando un programa intenta asignar más memoria en la pila de llamadas que está disponible. Es un error potencialmente grave que hace que el programa en cuestión a la caída y es generalmente el resultado de uno de los dos errores de diseño . La Pila
La pila se refiere a una sección de memoria que se utiliza para almacenar información acerca de las funciones de un programa . Los tamaños y los detalles técnicos de la pila se varían dependiendo del lenguaje de programación , compilador , sistema operativo y tipo de procesador, y estos detalles son generalmente ocultos al programador en la mayoría de los lenguajes de alto nivel .
Ejemplo Pila
Considere el siguiente ejemplo de pseudocódigo :
función
a { 1 . b.2 función llamar. llamar a la función c . }
función b { 1 . c.2 función llamar. Imprimir Spot. }
Función
c { 1 . Tirada . }
Dado que cada función puede llamar a otras funciones, existe la pila para realizar un seguimiento de dónde en la función madre para continuar después devuelve la función del niño. En este ejemplo , si se detiene dentro de la función de c , puede tener una pila que se ve algo como esto:
> A1 ---> B1 -------- > C1
< p > Desde la primera línea de la función Una función de llamadas B, y la primera línea de la función B llama a la función C. Después de la función C terminará , el programa seguirá una copia de seguridad de la cadena, y, finalmente, ejecutar B2 A2.
recursividad infinita
un desbordamiento de pila se produce cuando un programa intenta almacenar demasiada información en la pila. La causa más común de un desbordamiento de pila es un error de diseño se llama recursividad infinita. Consideremos el siguiente ejemplo de pseudocódigo :
función
A { 1 . función A. }
Y la pila resultante llame :
-> A1 ---> A1 -------- > A1 ------- ------- > A1 (y así sucesivamente )
Quienes están familiarizados con la programación de computadoras reconocerán esto como una variación en el bucle infinito , con excepción , en lugar de correr para siempre , este programa va a consumir todo el tiempo la memoria en la pila , lo que resulta en un accidente y un error de desbordamiento de pila.
Prevención
errores de desbordamiento de pila se produce generalmente cuando se trata de implementar algoritmos recursivos , y la clave para evitar la mayoría de los errores es para asegurar que el siguiente es cierto de todas las implementaciones recursivas : la función recursiva debe contener una condición de salida que no crea otra capa de la recursión , y la función recursiva debe estar diseñado de manera que cada capa de la recursión añadió debe traer la función más cerca de la condición de salida .
grandes variables locales
Otra , mucho más rara causa de los errores de desbordamiento de pila es la declaración de las grandes variables locales , por lo general en forma de matrices que contienen cientos de miles o millones de elementos. La forma más sencilla de evitar desbordamientos de pila en esta situación es el uso de punteros y asignación dinámica de memoria para evitar la declaración de los datos en la pila cuando tales operaciones intensivas de memoria se requieren.