Saltar al contenido

¿Cómo puede ocurrir un subdesbordamiento de pila en C++?

Ten en cuenta que en las ciencias cualquier problema casi siempere suele tener varias soluciones, no obstante nosotros mostramos la mejor y más óptimo.

Solución:

La única forma en que puedo ver que esto realmente suceda sería si declararas una función para usar el stdcall (o cualquier otra convención de llamadas que especifique que el destinatario limpia la pila) y luego invoque la función a través de un puntero de función que se especificó como cdecl (o cualquier otra convención de llamada donde la persona que llama limpia la pila). Si hace eso, la función llamada abrirá la pila antes de regresar y luego la persona que llama también abrirá la pila, lo que provocará un desbordamiento y cosas terribles.

En el caso específico de funciones miembro, la convención de llamada generalmente se conoce como thiscall y si la persona que llama o la persona que llama limpia la pila depende del compilador.

Consulte aquí para obtener detalles sobre las convenciones de llamadas.

No estoy seguro de si está hablando de la pila de estructura de datos y el problema de subdesbordamiento o de otra cosa. Tan lejos como el stack(data structure) underflow problema se refiere aquí es una explicación.

stack es un tipo de datos abstracto y una estructura de datos de último en entrar, primero en salir (LIFO). Una pila puede tener cualquier tipo de datos abstractos como elemento, pero se caracteriza solo por tres operaciones fundamentales: empujar, estallido y parte superior de la pila.

Él empujar La operación agrega un nuevo elemento a la parte superior de la pila o inicializa la pila si está vacía. Si la pila está llena y no contiene suficiente espacio para aceptar el elemento dado, se considera que la pila está en un estado de desbordamiento. La operación pop elimina un elemento de la parte superior de la pila.

UN estallido revela elementos previamente ocultos o da como resultado una pila vacía, pero si la pila está vacía, entonces entra en estado de subdesbordamiento (Significa que no hay elementos presentes en la pila para ser eliminados).

Él parte superior de la pila La operación obtiene los datos de la posición más alta y los devuelve al usuario sin eliminarlos. El mismo estado de subdesbordamiento también puede ocurrir en la operación superior de la pila si la pila está vacía.

Considere un ejemplo de implementación de pila:

template  class Stack 

public:
    bool isEmpty() const;
    size_t size() const;
    Item pop();
    void push(const Item& it);
private:

;

Ahora considere las siguientes operaciones que se realizan en esta pila.

C++ command                      resulting stack
------------------------------------------------
Stack S;
                                  _____ (empty stack of ints)



S.push(7);                            
                                  | 7 |  <-- top
                                  -----

S.push(2);                            
                                  | 2 |  <-- top 
                                  | 7 |
                                  -----

S.push(73);                           
                                  |73 |  <-- top 
                                  | 2 |
                                  | 7 |
                                  -----

S.pop();                           
                                  | 2 |  <-- top
                                  | 7 |                    -----
S.pop();      
                                  -----
S.pop();                           
                                  | 7 |  <-- top
                                  -----
S.pop();                           
                                  -----  (empty)

S.pop();                           
                    ERROR "stack underflow"

Comentarios y puntuaciones

Recuerda algo, que tienes permiso de esclarecer si te ayudó.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *