Pila dinamica en C, violacion de memoria?????

Iniciado por shin_akuma, 15 Febrero 2011, 01:18 AM

0 Miembros y 1 Visitante están viendo este tema.

shin_akuma

Que tal amigos bueno como viene en el tema tengo un problema con la implemetacion de una pila dinamica.

bueno lo principal de la implementacion ya esta que es pop push el problema viene cuando intento borrar la pila por completo e imprimirla bueno este es el codigo:

Directiva.h

#include <stdio.h>
#include <stdlib.h>
#include <conio.h>

typedef int tipo;

typedef struct Pila
{
    tipo dato;
    struct Pila *Sig;
   
}PILAD;

// Funciones R-W

void InsertaPila(PILAD **, tipo);
tipo Remover(PILAD **);
tipo Tope(PILAD *);
void BorraPila(PILAD **);
void ImprimirPila(PILAD *);



Funciones.cpp

#include "Directiva.h"

void InsertaPila(PILAD **top ,tipo Elem)
{
    PILAD *Aux = (PILAD *)malloc(sizeof(PILAD));
    Aux->dato=Elem;
    Aux->Sig = *top;
    *top = Aux;
}

tipo Remover(PILAD **A)
{
    tipo cont;
    PILAD *aux = (PILAD *)malloc(sizeof(PILAD));
    aux=*A;
   
    if(!aux)
    {
        cont = aux->dato;
        *A = (*A)->Sig;
        free(aux); 
        return  cont;     
    }
   
    else
    {
         printf("Pila vacia");
         exit(-1);
    }
}

tipo Tope(PILAD *A)
{
     return(A->dato);
}

void BorraPila(PILAD **A)
{
     tipo Elem;
     while (!A)
     {
         Elem = Remover (A);
     }

}

void ImprimirPila(PILAD *A)
{
     PILAD *Aux=(PILAD *)malloc(sizeof(PILAD));
     tipo Elem;
     for(Aux=A;Aux->Sig!=NULL;Aux=Aux->Sig)
     {
         Elem = Aux->dato;
         printf(" %d \n",Elem);
     }
}




main.cpp

#include "funciones.cpp"

main ()
{
     char Opc1;
     int Opc2,aux;
     PILAD *A;
     
     do
     {
         system ("cls");
         printf ("\t\t Estructura Pila Dinamica\n\n\n");
         printf ("1.- Insertar elemento en pila ");
         printf ("\n2.- Quitar elemento de pila");
         printf ("\n3.- Ver ultimo elemento y el numero de elemtos en la pila");
         printf ("\n4.- Vaciar la pila");
         printf ("\n5.- Ver elcontenido de la pila");
         printf ("\n6.- Salir de la aplicacion");
         printf ("\n\n\n  Inserta el numero de la funcion a realizar: ");
         scanf ("%d",&Opc2);
         
         switch(Opc2)
         {
             case 1:
                  system("cls");
                  printf ("\n\n Ingresa un numero para insertar en la pila: ");
                  scanf ("%d",&aux);
                  InsertaPila (&A, aux);
             break;
             
             case 2:
                  system("cls");
                  printf ("\n\n El ultimo elemento extraido de la pila es: %d",Remover(&A));
                 
             break;
             
             case 3:
                  system("cls");
                  printf ("\n\n El ultimo elemento de la pila es: %d",Tope (A));
             break;
             
             case 4:
                  system("cls");
                  BorraPila(&A);
                  printf ("\n\n La pila a sido eliminada exitosamente");
                 
             break;             
           
             case 5:
                  System ("cls");                 
                  ImprimirPila(A);
             break;

             case 6:                 
                  exit(-1);
             break;
             
             default:
                   system("cls");
                   printf ("La opcion no es valida");
             break;
         }
         
         
         printf ("\n\nDeseas seguir en esta aplicacion [S/N]: ");
         scanf ("%s",&Opc1);
     }
     while ( Opc1 == 'S'  ||  Opc1 == 's' );     
}



Bueno este fue el codigo el problema viene cuando intento ver o eliminar (Cuando hay elementos) se produce un error de accedo de memoria por favor ayudeme
ya que nesesito el programa lo mas pronto posible de antemano gracias.
El conocimiento es poder!!!

Saludos!!



Eternal Idol

La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón