programa de C con una pila basado matriz utilizando punteros

votos
0

Este es mi código y que no está funcionando. ¿Algunas ideas? No puedo cambiar la función principal o cualquiera de los nombres de las funciones o parámetros en base a la asignación dada sólo puedo cambiar el contenido de las funciones. Estoy súper pegado. Cualquier ayuda es apreciada. He corrido BGF en la función de pulsador y parece estar funcionando muy bien. Sin embargo, la función de pila de impresión piensa que la longitud de la matriz es 0, lo que no es útil en absoluto. ¡Muchas gracias!

typedef int *stack;

void push (stack st, int num)
{
        int len = st[0];
        st[len+1]=num;
        st[0]++;

}
int pop(stack st)
{
        int len = st[0], x;
        x = st[len];
        st[0]--;
        return x;
}
void printstack(stack st)
{
        int i, len= st[0];
        for(i=1;i<=len;i++)
        {
                printf(%d , st[i]);
        }

}
stack makestack()
{
        stack n;
        int arr[20];
        n = malloc(sizeof(stack));
        arr[0]=0;
        n= arr;
        return n;
}
int main()
{
 stack s;
 stack t;
 s = makestack();
 t = makestack();

 int x;
 push(s, 4);
 push(s, 6);
 push(t, 7);
 push(t, 5);
 printstack(s);
 printstack(t);
 x = pop(s);
 printf(%d popped from s\n, x);
 printstack(s);
 printstack(t);
}
Publicado el 19/09/2018 a las 17:18
fuente por usuario
En otros idiomas...                            


1 respuestas

votos
0

Has indefinido comportamiento porque

stack n;
int arr[20];
n = malloc(sizeof(stack));
arr[0]=0;
n= arr;
return n;

arres variable local makestacky serán destruidos una vez salidas de control makestack. De ahí que se le refiere a memoria no válida ir más lejos.

Por lo tanto cambiar makestacka la siguiente.

    stack makestack()
    {
            stack n = malloc(sizeof(int)*20);
            n[0]=0;
            return n;
    }

Nota: Typedefing el puntero es errónea evitarlo.

  typedef int *stack; //bad
Respondida el 19/09/2018 a las 18:10
fuente por usuario

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more